[Otis: OO is ontstaan omdat men dataoriented de functionaliteit wilde implementeren]
Feit blijft dat object orientatie programmeren (uiteraard van bepaalde problemen) makkelijker moet maken. De verdeling in klassen met data en methoden is een denkwijze die vrij direct aansluit op de 'echte' wereld. Ik weet niet hoever je wilt gaan met 'data georienteerd', maar waarschijnlijk ben ik het hier niet helemaal met je eens.
OO programmeren vs Procedureel programmeren zijn allebei even moeilijk/makkelijk. Het OO concept is NIET bedoelt om programmeren in algemene zin makkelijker te maken! Het is een _andere_ manier van het implementeren van functionaliteit, die in gevallen waarbij je data-georienteerd bezig bent gemak oplevert en in gevallen waarbij je je focust op functies (een wiskunde-library bv) juist onhandig is, en waar dus procedureel programmeren handiger is.
Of real life dataoriented is weet ik niet. Ik ben er na jaren wel achter dat het beste een hybride oplossing gekozen kan worden: soms functies en soms OO. (bv C en C++ ineen).
Software opdelen in componenten heeft NIETS te maken met OO talen. COM components zijn bv binaire componenten die hergebruik bevorderen, maar kunnen gewoon in C worden geschreven, zonder structs met pointers/fake vtables.
[Otis: Java is een klote platform]
Waarom vind je het een klote platform?
Omdat de JVM in specialistische gevallen nuttig kan zijn (bv wanneer er een optimalisatie slag plaats kan vinden op basis van gegevens die tijdens runtime zijn verkregen, en dus niet verwerkt kunnen worden door een compiler tijdens compiletime), maar in VEEL gevallen niet. Ik heb erg veel javaprogrammatuur gezien en geschreven, van gui apps tot servlets tot applets, en ik heb zelden tot nooit gevallen bij de hand gehad waarbij ik dacht: hier zie je de kracht van runtime optimizing. Bijna altijd had je geen moer aan die JVM, en kon je veel beter native compileren naar het uiteindelijke doelplatform. Het draait toch op een platform (de hardware), waarom moet ik daar een cpu op gaan emuleren?
Alleen omwille van de platform 'onafhankelijkheid'. Maar dat is een farce. Op veel platforms is niet een vergelijkbare JVM te verkrijgen die eenzelfde performance biedt als bv op windows of solaris. Verder wordt het belang van platform onafhankelijkheid sterk overschat. Het grootste voorbeeld daarvan is Swing. Als ik op windows een programma run als gebruiker, interesseert me het geen RUK of dat programma ook op apple moet draaien, ik draai het op een PC. Maar ik heb wel last van dat het programma ook op apple draait ivm de grootste gemene deler in Swing. Het is verder zo bar traag in het afbeelden van schermpjes dat bv de GDI ook kan, dan ik denk: waarom moet dit?
vandaar.
Dat vraag ik me af, waarom zou je een server-side applicatie ook niet platform onafhankelijk willen maken? Java Servlets zijn tenslotte ook een enorm succes. Dit heeft natuurlijk ook andere redenen, maar run-time platform onafhankelijkheid is toch een groot voordeel
Omdat de platform onafhankelijkheid zoals gepredikt door Sun niet bestaat, plus niet speelt bij projects. Wat ik wil als developer is mn middle tier kunnen bouwen op een manier dat hij met een serie databases kan praten en kan worden gebruikt door hogere orde layers. Of die middle tier dan op een sundoos staat en de rest niet of op een windows doos en de rest niet, boeit niet. Platformonafhankelijkheid speelt ALLEEN als men die middletier doos wil vervangen door een ander merk en ander OS, waardoor de middletier niet meer werkt. Echter elk bedrijf heeft een heterogeen systempark, waardoor een vreemd OS voor de middletier niet uitmaakt, daar dat OS veelal niet vreemd is voor de organisatie. Ergo: je sleept een heleboel ballast mee om platformonafhankelijk te zijn, terwijl die klant die de app draait dat niet boeit. Die wil alleen maar de functionaliteit aanzetten en inzetten.
Bij .NET is dit toch niet veel anders? De downloads van de .NET SDK zijn velen malen groter dan de Java 2 SDK (zelfs v1.4). Uiteraard zal downloaden niet nodig zijn omdat Microsoft al over een beter distributie-kanaal beschikt (lees Microsoft Windows) maar toch is het nogal een toestand wat .NET met zich meebrengt.
.NET zit er wel aan vast, maar het draait niet onder de programmatuur maar er naast. Een C# applicatie draait wel in de CLR maar wordt naar native code gecompileerd en DAN gerunt. .NET vervangt dan ook op den duur Win32, terwijl de JVM bovenop bv win32 blijft liggen.
Bij de JVM zit je dus, botweg gezegd, met een amiga emulator op een PC een amiga programma te draaien, terwijl .NET het amiga programma vertaalt naar x86 en het programma draait native op bv windows.
Ik ben overigens niet altijd te spreken over .NET hoor, bv op het gebied van OO. Typerend voorbeeld: een C# tutorial sprak over het bouwen van een DLL met 2 functies: Add en Sub. (telt 2 getallen op vs trekt 2 getallen van elkaar af). Pure procedurele benadering. Maar dat gaat niet werken, want alles is een object dus moest er een object worden gecreeerd waarIN die 2 functies zaten als methods. Is dus een paradoxale toestand: procedureel lopen knutselen in een OO omgeving, je kunt dan beter een functionele omgeving pakken. Maar dat kan niet met .NET.