Archief - [PROG]C++/C# C# Over C++?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Moto

Legacy Member
Als zeker en vast C niet bekijken

tussen C++ en C#
In C# zult ge sneller iets deftigers en performanter kunnen maken dan in C++
Moet ook kijken wat uw attention-span is heh :p
Als ge zonder programmeer-ervaring in C++ een deftige engine wilt schrijven in uw vrije tijd zijt ge wel een paar jaar bezig :)

Beter een bestaande engine in C# nemen en daarmee vertrekken
Der zijn nu trouwens al een deel gamedevelopers die hun tools in C# maken

killgore

Legacy Member
Shai Hulud zei:
OO maakt het gemakkelijker om abstracties te maken in je programma.
Je kan in een game engine bijvoorbeeld een klasse maken die verantwoordelijk is om textures in te laden. Die zal dan alle details van het inladen (welke compressie is er gebruikt, waar staat de file?) verstoppen voor de andere code, en de texture inladen.

Je zal in C natuurlijk ook proberen zo'n abstracties op te bouwen, maar het is wel eenvoudiger in OO talen.

Een ander voordeel is inheritance/polymorfisme. Je kan bvb een klasse maken die verantwoodelijk is voor de verbinding met een SQL database. De klasse zal methodes aanbieden om te verbinden en om SQL statements uit te voeren.
Het is duidelijk dat de onderliggende implementatie verschillend zal zijn voor bvb MySQL en Oracle servers.
Je kan dan een kind klasse maken voor elke server die je ondersteunt.
De code die effectief met de DB moet omgaan gebruikt echter de ouderklasse, wat wil zeggen dat je om van DB te veranderen er enkel moet voor zorgen dat een andere kindklasse wordt geladen.

en waar ergens haalt dat uw weg van de basis van zaken?

jodeman

Legacy Member
killgore zei:
Geef me nu eens 1 goed vb?

Als er nu iemand nog niet goed kan programmeren is het volgens mij ook het beste om niet direct in de OO te duiken. Eerst moet je de basis ints, strings, iteraties, arrays, collecties... een beetje onder de knie hebben en basis programma's maken.
Bij een programmeur met ervaring die een andere taal gaat leren is dat niet nodig omdat die de basiskennis al bezit.

Shai Hulud

Legacy Member
en waar ergens haalt dat uw weg van de basis van zaken?
OO is een andere manier om uw programma te ontwerpen. Het is dat moeilijk uit te leggen is, en je hebt enige ervaring nodig voor je er echt mee vertrokken bent.

Een onervaren programmeur kan gemakkelijk veel tijd verliezen met te proberen alles in klassen te gieten (en het dan toch verkeerd doen).
Hij kan beter proberen alles gewoon goed in functies op te delen, en zich geen zorgen maken over OO principes.
Alles wat je op die manieer leert (zonder OO) heb je toch nodig om goed met OO technieken om te gaan.

jodeman heeft gelijk. Ik zou zelfs nog verder gaan. Het kan bijzonder interessant zijn om een aantal van die dingen zelf te implementeren, alhoewel je dat normaal nooit moet doen.
Je krijgt een beter inzicht in hoe al die dingen werken door zelf met ruwe NULL-terminated strings om te gaan ipv een string klasse, of door zelf een linked list, tree of hash table te implementeren . Je moet goed begrijpen hoe die werken om de juiste te kunnen kiezen.

Cakeman

Legacy Member
Ik zou meteen met C# en OO-concepten leren werken.

De kans dat je ooit als engine programmer aan de slag zal gaan is betrekkelijk klein. Je kan even goed een bestaande engine aanspreken in C#.
Zo leer je meteen juist werken. Anders zit je je straks vast te denken op die procedurele manier van werken waardoor je het nog lastiger zal hebben om OO zaken te begrijpen en toe te passen.
In de boeken over C# die ik al gelezen heb, worden de beginselen (variabelen, collections, ...) mooi samen uitgelegd met OO-concepten. Het lijkt mij prima te begrijpen voor iemand die nog geen ervaring heeft.

Heel die logica van "begin met het begin, leer eerst C, dan C++ en dan C#," vind ik trouwens zeer onlogisch. Als je naar de rijschool gaat, leren ze je ook meteen met een moderne wagen rijden en niet eerst met een model uit de 19de eeuw waarvan je vooraan nog aan zo een zwengel moet draaien gewoon maar omdat je zo de motor beter leert begrijpen.

In mijn ogen is C# the way to go.

.:KrusT:.

Legacy Member
Moest ge voor C# gaan, kan ik alvast het boek Beginning C# Objects aanraden. Het is niet zozeer een boek die syntax leert (hoewel hier wel een deel van het boek aan besteed wordt), maar het is wel zeer goed boek om object-georienteerd te werken. Het begint bij het concept van het programma te maken (student registration system) tot het uiteindelijk coden ervan, waarin de stappen zoals requirement opstellen, use cases, static/dynamic model etc duidelijk worden uitgelegd en toegepast.

Shai Hulud

Legacy Member
Zo leer je meteen juist werken. Anders zit je je straks vast te denken op die procedurele manier van werken waardoor je het nog lastiger zal hebben om OO zaken te begrijpen en toe te passen.
In de boeken over C# die ik al gelezen heb, worden de beginselen (variabelen, collections, ...) mooi samen uitgelegd met OO-concepten. Het lijkt mij prima te begrijpen voor iemand die nog geen ervaring heeft.

Heel die logica van "begin met het begin, leer eerst C, dan C++ en dan C#," vind ik trouwens zeer onlogisch. Als je naar de rijschool gaat, leren ze je ook meteen met een moderne wagen rijden en niet eerst met een model uit de 19de eeuw waarvan je vooraan nog aan zo een zwengel moet draaien gewoon maar omdat je zo de motor beter leert begrijpen.
Je moet kunnen procedureel programmeren voor je kan OO programmeren.
Het is niet omdat je met objecten en klassen kan werken dat je ineens geen goede functie meer moet kunnen schrijven.

Je moet eerst leren schaatsen voor je ijshockey kan spelen.

Ik zou beginnen met C, en dat overgaan naar een moderne OO taal zoals Java of C# en C++ volledig overslaan. Ik zou trouwens eerder Java leren dan C#. Kwestie van niet vast te zitten aan MS, maar dat kan aan mij liggen.

killgore

Legacy Member
Nee, ik denk dat je perfect in staat bent om te leren coden in OOP-omgeving (dus een klasse) en eerst daar die procedurele manier / basics aan te leren en dan later pas in te gaan op het OO concept op zich.

Het enige nadeel is dat je in c++ geforceerd wordt om met main() te werken :).

Shai Hulud

Legacy Member
Je kan natuurlijk in C# het hele klasse gedoe negeren, en op die manier programmeren, maar waar ben je dan mee bezig?
Je moet trouwens in een OO taal ook een main functie, of methode, schrijven, je programma heeft immers een entry point nodig.

IK zou nog steeds aanraden om met C te beginnen, al was het maar omdat je dan echt met pointers leert werken.

killgore

Legacy Member
Tja, tot op een bepaald niveau blijf je sowieso binnen 1 functie /statische methode werken (basis leren van variabelen, operatoren, geheugenmanagement, ...), of je nu OOP gaat of prodedureel.
Pointers worden op dit niveau gegeven, dus doet het er niet echt toe of je C++ gaat of C (je hebt wel andere vorm van allocatie, ma komt op hetzelfde neer).

Daarna kan je functies aanleren en daarna OO, dus een beetje de geleidelijke opbouw, c-like (eerst functies uitleggen) naar echt OO-minded c++, zoals veel (theoretische) boeken trouwens hanteren. Maar dit is echter geen pure c eh ;).

Ook, als je echt puur C gaat ga je echt een pak rommelfuncties leren die je niet meer nodig hebt als je OO gaat zonder dat deze een zogezegde low-lev leerwaarde hebben imho.

wlibaers

Legacy Member
killgore zei:
Kijk, het is een leerproces voor zichzelf, dan moet je echt niet gaan kijken naar 1 progtaal waar je het meest mee bent, maar waar je het conceptueel het meest mee bent momenteel.
C++ is idd minder voor gewone applicatieontwikkeling momenteel, maar het leert je verdomme wel deftig hoe een pc werkt, dat tesamen met beetje computerarchitectuur en je hebt een serieuze basis.

Maar volgens dat argument leer je beter C. De low-level spullen zijn ongeveer gelijk, en de OOP of templates van C++ gaan je niet veel bijleren over hoe een PC werkt. Zelf OOP libs e.d. schrijven in assembly wel, maar dat was niet echt aan de orde :p

Het hangt er ook sterk van af wat je wil doen. C++, met z'n combinatie van meerdere stijlen (C + polymorfisme + generisch) kan natuurlijk interessant zijn. Maar er zijn andere dingen die ook interessant zijn, dus je moet prioriteiten hebben. Je kan bijvoorbeeld kiezen minder van de taal te leren (of het gewoon bij pakweg C of Fortran te houden, of zelfs een scriptingtaal), en meer tijd te besteden aan algoritmen en programmeertechnieken.

The Crazy Frog

Legacy Member
Evil_Freaky_BE zei:
Ik wil niet echt de VB.Net kant uitgaan van voor elk probleem een oplossing bieden met voorgeprogrammeerde functies enzovoort, ...
C# en VB.net zijn alletwee gebaseerd op het .net framework, de programmeertaal is gewoon de syntax, en alle functies die beschikbaar zijn in VB.net zijn ook beschikbaar in C#.

dJeez

Legacy Member
Shai Hulud zei:
Je moet kunnen procedureel programmeren voor je kan OO programmeren.
Daar ben ik het eigenlijk totaal niet mee eens. Je kan perfect OO aanleren zonder enige kennis van procedureel programmeren, in sommige gevallen lijkt het mij trouwens beter dan de slechte gewoontes die je misschien hebt aangekweekt bij het procedurele programmeren af te leren.

Persoonlijk zou ik voor C# (of Java) gaan trouwens, C++ kan je indien nodig later nog wel leren.

killgore

Legacy Member
wlibaers zei:
Maar volgens dat argument leer je beter C. De low-level spullen zijn ongeveer gelijk, en de OOP of templates van C++ gaan je niet veel bijleren over hoe een PC werkt. Zelf OOP libs e.d. schrijven in assembly wel, maar dat was niet echt aan de orde :p
Zever, C++ en C zijn op dat niveau echt gelijkaardig. Als je er diep genoeg op ingaat kom je daarop uit. Je kan bij C++ even low lev gaan als bij C, itt talen als java en c# waar je met de interpreter/JIT-compiler zit.
C++ leren houdt niet in dat je onmiddellijk alle c++ libs moet gaan gebruiken eh.
Je laatste argument komt trouwens overeen met procedures in assembly schrijven ipv functies in C en daar zie ik dus totaal uw logica niet van in :/.

Het hangt er ook sterk van af wat je wil doen. C++, met z'n combinatie van meerdere stijlen (C + polymorfisme + generisch) kan natuurlijk interessant zijn. Maar er zijn andere dingen die ook interessant zijn, dus je moet prioriteiten hebben. Je kan bijvoorbeeld kiezen minder van de taal te leren (of het gewoon bij pakweg C of Fortran te houden, of zelfs een scriptingtaal), en meer tijd te besteden aan algoritmen en programmeertechnieken.
Natuurlijk, C++ was EEN taal waar je bv. dat niveau kunt leren, ik vermelde het omdat ik daar meest mee bezig ben, die alternatieven die je opsomt zijn evenwaardig.

Jiggy

Legacy Member
Wat ben je nu met OO als je nog niet weet hoe je een String moet declareren. Je moet nog altijd juiste informatie terugkrijgen van uw methoden. Er zijn andere belangrijkere dingen eerst te leren. Het is toch niet de bedoeling dat je met een hoop klasses zit die allemaal foute methodes teruggeven omdat je de basisprincipes niet doorhebt. Zelfs als je er al lang mee bezig bent leer je altijd nog bij.

killgore

Legacy Member
Jiggy zei:
Wat ben je nu met OO als je nog niet weet hoe je een String moet declareren. Je moet nog altijd juiste informatie terugkrijgen van uw methoden. Er zijn andere belangrijkere dingen eerst te leren. Het is toch niet de bedoeling dat je met een hoop klasses zit die allemaal foute methodes teruggeven omdat je de basisprincipes niet doorhebt. Zelfs als je er al lang mee bezig bent leer je altijd nog bij.

Hij kan al programmeren, dus ik veronderstel wel dat hij weet hoe hij een string kan declareren.

En ik begrijp niet wat iedereen hier zo zit te zeggen van OO is moeilijker: wat in godsnaam is het verschil tussen leren met een object werken of met een functie werken qua moeilijkheidsgraad en dergelijke? Rien du tout.

jodeman

Legacy Member
Ah ok... ja dan zou ik ook niet wachten. Dacht dat hij nog geen programmeerervaring had.
C# is the way to go, je wordt gewoon geduwd in de OO en grafisch design is peace of cake.

Tyfius

Legacy Member
Ik zou beginners sowieso aanraden om met een OO taal te beginnen, tenzij ze specifiek naar iets op zoek zijn, maar als het puur gaat om desktop applicaties ofzo, OO all the way.
Het hele punt van talen zoals Java en C# is juist de programmeur niet meer te moeten lastig vallen met onnodige kennis van het systeem. Just program and use the framework, it will work as expected.

wlibaers

Legacy Member
killgore zei:
Zever, C++ en C zijn op dat niveau echt gelijkaardig. Als je er diep genoeg op ingaat kom je daarop uit. Je kan bij C++ even low lev gaan als bij C, itt talen als java en c# waar je met de interpreter/JIT-compiler zit.
C++ leren houdt niet in dat je onmiddellijk alle c++ libs moet gaan gebruiken eh.
Je laatste argument komt trouwens overeen met procedures in assembly schrijven ipv functies in C en daar zie ik dus totaal uw logica niet van in :/.

Wel, als het de bedoeling is om low-level spullen te leren kan je dat net zo goed in C als in C++ doen. Maar voor die low-level is er zo goed als geen verschil tussen C en C++ (de extra's bij C++ zijn eerder high-level). Je zou bij beide talen hetzelfde leren, dus is er niet meteen een reden om een van de twee te verkiezen. Tenzij je aan bestaande low-level projecten wil werken om bij te leren, OS kernels en drivers bijvoorbeeld, waar C++ niet zo populair is.

En verder is, als het echt de bedoeling is low-level spullen te leren, assembly uiteraard beter dan C of C++.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan