Gå til innhold

Anbefalte innlegg

Den 2002-07-01 11:05, iGGy skrev:

Quote:


Op.overloading gjør at man f.eks kan behandle ting som "objekter" og utføre operasjoner på dem.. f.eks cout >> "blablabla"; eller "std::string n; n += "Tore";" type ting...

At multiple inheritance er utelatt gjør vel ikke ting så mye mer ryddig? Hvorfor var det uryddig? Java har jo "multiple inheritance" av interfaces... (interface er vel i prinsippet bare en abstract C++ klasse).



Jeg skjønner overlastingsargumentet ditt, men det er ikke nødvendig, for at et språk skal være fullt objektorientert. Det er mer komfortabelt, men det får så være.

Multiple inheritance er spesifikt utelatt fordi å gjøre ting mer ryddig, ikke mitt valg. Men. Det gjør nødvendigvis ting litt mer uoversiktlig når en klasse kan inneholde medlemmer fra en haug med andre klasser, dermed må du slå opp disse klassene for å se hva som arves.

Med interfaces må jo klassen selv definere de arvede funksjonene, dermed blir det mer oversiktlig. Ikke at jeg har noe imot multippel arv selv, men sånn er tankegangen. Så vidt jeg vet finnes det interfaces i C++ også? Kanskje ikke pur C++, men nøkkelordet gjenkjennes i alle fall i VC++, er ikke helt kjent med det ennå. Mener å huske at interfaces er brukt i forbindelse med COM.

Lenke til kommentar
Videoannonse
Annonse

Quote:


Så vidt jeg vet finnes det interfaces i C++ også? Kanskje ikke pur C++, men nøkkelordet gjenkjennes i alle fall i VC++, er ikke helt kjent med det ennå. Mener å huske at interfaces er brukt i forbindelse med COM.


 

Det ble vel sagt i en tidligere post at en klasse med bare abstrakte metoder er det samme som et interface. Den gjør ihvertfall samme nytten.

 

Multippel arv gir dermed flere muligheter. Vil du ha det ryddig og enkelt holder du deg unna. Men den dagen du skal lage en Amfibiebil-klasse er multippel arv god å ha. :smile: :smile:

 

LeD

Lenke til kommentar

Quote:


Den 2002-07-02 18:14, LeD skrev:

Det ble vel sagt i en tidligere post at en klasse med bare abstrakte metoder er det samme som et interface. Den gjør ihvertfall samme nytten.


Multippel arv gir dermed flere muligheter. Vil du ha det ryddig og enkelt holder du deg unna. Men den dagen du skal lage en Amfibiebil-klasse er multippel arv god å ha. :smile: :smile:


LeD


Det er klart, at en klasse med bare pure virtuelle metoder er et interface. Men i det siste har jeg sett interface nøkkelordet i C++ også.

Men mens vi snakker om inheritance, er det noen som husker en side hvor det sto om inheritance via templater? Klarer ikke å huske hva den het...

Lenke til kommentar

Quote:


Det er klart, at en klasse med bare pure virtuelle metoder er et interface. Men i det siste har jeg sett interface nøkkelordet i C++ også.

Men mens vi snakker om inheritance, er det noen som husker en side hvor det sto om inheritance via templater? Klarer ikke å huske hva den het...


Dunno, men du kan, tror jeg (dette er tatt fra hodet) f.eks skrive

class SuperString : public std::basic_string {public: ...};

 

Hvis det var det du tenkte på.. ??

Lenke til kommentar

Quote:


Riktig. Men C# er laget for .NET-plattformen, og gir liten mening for seg selv.


AFAIK: Nei. Ingenting i veien for at C# kan fungere uten .NET.

 

Quote:

Det finnes flere språk til .NET-plattformen. Men .NET gir sterke begrensninger på språkene. Så det er stort sett bare syntaksen som er forskjellig.


Hvilke begrensninger?? .NET er et klassebibliotek, et API hvis du vil (som du definitivt selv vet!), jeg skjønner ikke hvilke begrensninger det legger på språkene?

 

Quote:


Alle .NET-språk vil altså være "like objektorienterte".


Tja. Du kan skrive .NET i C ved hjelp av en del vtable-trixing med structs (tror jeg det var)... det gjør ikke C som språk objektorientert - men det gjør at man kan skrive objektorientert kode! (Som nevnt i denne eller annen thread tidligere: Obj.orientering er ikke et språk, men en måte å struktuere et program på.)

LeD

Lenke til kommentar

Quote:


Hvilke begrensninger?? .NET er et klassebibliotek, et API hvis du vil (som du definitivt selv vet!), jeg skjønner ikke hvilke begrensninger det legger på språkene?


 

.NET er mye mer enn et klassebibliotek! Alle .NET-språk (C#, VB.NET, C++ for .NET, osv...) kompileres ikke til maskinkode, men til en virtuell assemblykode (IL) som tolkes av CLR (Common Language Runtime). CLR er altså en del av .NET. Den kan sammenliknes med Javas JVM.

 

Om .NET-modul som er skrevet i f.eks. C# eller VB.NET har ingenting å si. Du kan kalle metoder skrevet i et annet språk, opprette objekter definert i et annet språk, osv.

 

For at dette skal fungere må mye være definert i .NET som tidligere var en del av hvert språk. Bl.a. hvilke typer som skal eksistere og regler for arv er definert i .NET og IKKE i C# og VB.NET.

 

Dette innebærer også at C++ for .NET er sterkt redusert i forhold til standard C++. Bl.a. ingen multippel arv.

 

Er derfor i .NET vi finner svaret på "hvor objektorientert C# er". C# er laget for .NET. Mulig at det finnes en utvidet definisjon med egne typedefinisjoner, arveregler, osv. Men jeg kjenner ikke til at noe sånt er implementert.

 

LeD

 

[ Denne Melding var redigert av: LeD på 2002-07-03 12:08 ]

Lenke til kommentar

Quote:


Den 2002-07-03 11:19, iGGy skrev:

Dunno, men du kan, tror jeg (dette er tatt fra hodet) f.eks skrive

class SuperString : public std::basic_string<TCHAR> {public: ...};


Hvis det var det du tenkte på.. ??


Det var ikke akkurat det jeg tenkte på, men det er for lenge siden til at jeg husker konseptet. Dumt at jeg ikke tok vare på linken :

Lenke til kommentar
  • 1 måned senere...
  • 2 måneder senere...

Vil tro at C# ble utviklet for å lokke Java-utviklere over på .NET plattformen. Brorparten av utdanningsinstitusjonene har Java som prgrammeringsspråk, og MS er smarte nok til å utnytte dette. Dessuten er de jo flinke til å ta eksisterende teknologier, finpussse litt på dem og lage dem enda mer brukervennlige (og av og til bedre), noe de også har gjort med C#.

 

Har selv programmert Java en del år, og må si at det var overraskende fort gjort å "lære" seg C#. Vil si at C# er mye mer likt Java, enn C++ og eventuelt også VB. Prøver selv å være lite religiøs, men må inrømme at jeg er imponert over .NET-plattformen, både med tanke på funksjonalitet og ytelse. Teoretisk sett vil det være et fett om du programmerer komponentene dine i C#, VB, eller C++ i .NET, da all kode blir oversatt til IL, og JIT-kompilert ved runtime.

Lenke til kommentar
  • 2 måneder senere...

(edit: sorry dette var feil)

 

EDIT:Sjekket dette, microsoft utviklet det ja...husket feil sorry.

Som du sier ANK så utviklet microsoft C#

 

Det eg mente var at C# er et ganske fritt språk.

I 2000 lenge før .NET så sendte microsoft C# specs til ECMA, av politiske grunner. Dette betyr i teorien at hvem som helst kan lage en egen Vesjon av ein C# kompilator.(som fks Mono)

 

Det er nå noken som holder på med å porte .NET til linux og andre OS'er

Du kan se for deg selv på : http://www.go-mono.com/

Om du kan kjøre windows .net app'er her vet eg ikke men, de har gried å lage ein C# kompilator.

 

Etter min mening så er .NET noe av det beste som er kommet ut av MS, det er rett å slett genialt. Mangler berre at noen(Mono) lager JIT til flere OS!

Lenke til kommentar
  • 1 måned senere...
Noen som vet om en C# compiler som compiler til Binary?

Dette kunne vært ganske intrestant, fks bruke den i lag med MFC.

 

Vel, det ville da bli en gigantisk exe-fil, siden .NET runtime filene er så store. Du kan jo lage COM-komponenter i MFC og bruke dem i .NET og motsatt? Er det noe spesielt du tenker på?

 

.Ø.

Lenke til kommentar
  • 2 måneder senere...

Eneste forskjellen jeg kan se er i navnene til standardklassene, samt at java er mer konsistent med upper/lower case i klassenavnene.

Da er jo selve språket ganske likt, fordi klasse navnene er pga .NET ikke C#.

 

Noen programmeringstekniske forskjeller:

- C# har automatisk minnehåndtering (noe du må gjøre selv i C++)

Det som gjør at det er minne håndtering er at det brukest i lag med .NET

 

En binary versjon av C# ville sannsynligvis ikkje hatt automatisk minne håndtering...

Lenke til kommentar
  • 1 måned senere...

Oppdaget denne tråden litt for seint; den har forlengst splittet opp i mange undertråder.

Microsoft laget ikke C# som en Java dødare eller for å lokke til seg Java-utviklere. Det kan nok ha vært greie side-effekter, men hovedgrunnen var at Sun ikke tillot Microsoft å integrere Java med COM. Og Microsoft mistet dermed muligheten til å utnytte Windows og de millioner av kodelinjer som ligger der.

 

*Alt* i C# er objekter, prøv for eksempel

(1+4).ToString() 

eller

double t = 1.0;

double n = 0.0;

System.Console.Write( (t/n).ToString() );  // ...og dette er grunnen til at Java ikke kan brukes til 'engineering' (riktig svar SKAL være 'infinity', IKKE overflow exception!)

Det er allikevel sant at noen typer ikke er klasser... 'int' er for eksempel en struct eller value-type. Disse kan ikke arves fra. De er ikke sealed classes. De allokeres på stacken, ikke heapen. Dette er viktig - man får ytelsen til int/float som vi er vant til, men objekt-orienteringen til Simula. Søk på 'value type', 'struct' eller boxing for flere detaljer om hva som egentlig skjer.

 

inheritance via template blir kalt generics, og er på vei inn i både Java og C#. Ser ut som om den kommer til Java først.

 

Du kan kompilere til 'native' kode, uten at jeg husker verktøyet for å gjøre det. Vet ikke om det er lett/mulig å bruke slike bibliotek fra C++ - ideene bak en slik native klump er å slippe kompilering run-time, samt å obfuskere kode (omvendt av 'open source').

 

Ellers er det riktig som noen har nevnt at C++ kommer (ad omveier) fra Simula og Java fra C++. C# kommer, i følge Microsoft, også fra C++, men det kan nok tenkes at de har sett litt på Java underveis.

 

MASSEVIS av fordeler med C# framfor C++, det er *ikke* rart at VB ikke har forsvunnet (det finnes visstnok 10 ganger flere VB-utviklere enn C++). (Og i neste versjon av VB kommer visst VB til å bli litt mer nybegynnervennlig igjen)

 

Ingen har nevnt komponentorientering, som jo er et av de sterkeste punktene til .NET.

 

Grå.

Lenke til kommentar
  • 3 uker senere...

Enklest er det vel bare å si at .NET (C# eller ikke) er genialt for Microsoft programmere som tidligere har "programmert" ASP og/eller VB6. Jeg er en av dem, og kan ikke si annet enn at det er utrolig kult. Jeg driter i om ditt og datt er bedre i Java, Smalltalk eller whatever. Poenget er at .NET er genialt innenfor Microsoft verdenen. Jeg tviler STERKT på at det er noe dårligere/bedre enn Java etc. Det kommer til slutt til smak og behag.

 

Jeg tør å vedde hva som helst på at du kan oppnå samme resultat med C# som med Java (eller omvendt) uten større vanskeligheter. Men bruker man Visual Studio.NET, er jeg også ganske sikker på at utviklingstida vil være endel kortere i .NET.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...