Og der er selvfølgelig flere aspekter. Men når man begynder at gå lidt mere ned i detaljerne så komemr der jo også forskellige opfattelser for dagen.
C++ folket mener at multipel arv er godt. Java folket mener det er skidt.
Java folket mener at interfaces er et selvstændigt begreb. C++ folket mener det bare er en abstrake klase med udelukkende abstrakte metoder.
Mange OO patterns kræver statiske (på klasse fremfor på objekt) members/metoder. Men jeg ved ikke rigtigt om jeg vil kalde det en OO feature. Det er en nødvendig feature.
Nej, selvfølgelig ved du ikke alting.. Men du ved sq meget om de ting her.
Du skrev fx til mig at man er nødt til at anvende en static i :public void static main().. fordi man ikke havde et objekt af klassen. Hvordan forholder det sig med C++ udgaven? har man da et objekt af klassen når man starter?
Og fordi det er en C funktion, så er det samme funktion selvom der er forskellig argument liste.
Hvilket naturligt fører til at begreber som method overload og operator overload også bruges i en del OO sprog (C++ har begge, mens Java mangler operator overload). Jeg synes dog heller ikke at det er essentiel OOP bare praktisk.
Ja, de kan godt være lidt forvirrende de objekter. *S*
jeg bliver nødt til at vende tilbage til det static. Når man laver variable i Java på denne måde : public static int tal; Hvad er ideen med at lave sådane variabler?
Ideen er at man så har en variabel man kan refere direkte til fra andre klaser - som en "global variabel".
Og man står til mega store tæsk fra både OO fanatikerne og Java fanatikerne, fordi man har overtrådt et hav af regæer om encapsulation, decoupling etc..
AHA! Så der findes altså globale variabler i java. *S* Det var det jeg talte om da jeg sagde at der var forskel på static i java og c++. benytter man flere variabler i samme klasse på den måde, opstår der så ikke et problem mht. til at inatialisere dem?
I c++ er det sådan at klasse metoder indeholder pointeren This som et skjult parameter. Hvorledes forholder det sig i Java? Synes at This i Jave er anderledses.
Her har jeg lavet en traditionel udbygning af Tal, så den fungerer som en integer-wrapper - og dog! værdi er ikke en instansvariabel, men en klassevariabel. Følgende testanvendelse viser forskellen: class StaticTest {
Følgende eksempler viser en lidt anden bruge af instans og klasse variable:
public class Tal { private static int antal = 0; private int no; private int tal;
public Tal(int tal) { antal++; no = antal; this.tal = tal; }
public void setTal(int tal) { this.tal = tal; }
public String toString() { return "[Tal: værdi=" + tal + ", objekt " + no + " ud af " + antal + "]"; } }
public class StaticTest { public static void main(String[] argv) { Tal t1 = new Tal(3); System.out.println(t1); Tal t2 = new Tal(5); System.out.println(t1); System.out.println(t2); t2.setTal(8); System.out.println(t1); System.out.println(t2); } }
Jeg tænker på at klasse metoder i C++ indeholder den skjulte pointer THIS, undtaget er dog statiske metoder. Hvordan er det i Java? Ved at man benytter THIS til at initialisere variabler i Java, men hvad med metoder.
Jeg har så lige et par enkelte spørgsmål her i slutspurten. Hvor vil du mene at de to sprog egner sig bedst. Altså, hvor er java bedst og hvor er C++ bedst?
Java har et meget større standard API end C++ => mere portabelt.
Java har garbage collection og tillader ikke pointer manipulation => mere sikkert.
Så medmindre du skal lave noget hvor du kan udnytte nogle af de ting C++ har som Java mangler som f.eks. templates eller skal lave noget der ikke kan køre i en JVM (som f.eks. en JVM !), så ville jeg sige Java.
Det er et ret væsentligst spørgsmål. og jeg mener ikke, som arne, at vi kan affærdige det med C++ er essentielt sproget C, derfor ikke.
Lad os gå en omvej og kikke på "struktureret programmering": en if ... else sætning er struktureret og en goto er ikke struktureret. Men hvis vi kikker på den genererede assemblerkode så bliver den if ... else jo faktisk implementeret ved hjælp af goto sætninger.
Ditto med C++'s objektorienterethed. Den bliver godt nok implementeret ved hjælp af C, men selve sproget C++ hjælper programmøren til at se objektorienteret på probletet og til at programmere det med OO metodik. Så jeg vil kalde C++ for objektorienteret.
C++ er så et nogenlunde tidligt forsøg på at lave et objektorienteret sprog, så det er ikke nær så gennemført i den retning som Java er. Men det er en helt anden sag.
C++ vil være en lille smule hurtigere end Java, men ikke ret meget. Typisk noget i 0-50% området. Forudsat at du bruge nyere JVM's (de gamle er håbløse med hensyn til performance).
Man kan ikke skrive et maskinnært program i Java. Derfor skal hardware drivere skrive i f.eks. C++. Og derfor skal f.eks. En JVM også skrives i f.eks. C++.
Java programmer er betydeligt mere sikre end C++ med hensyn til at undgå programmerings fejl. Beskyttelse mod hackning og lignende afhænger mere af program design end sprog (omend Java dog ikke kan lide af de buffer overflow som C/C++ har haft en del af - gets).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.