Rataplan schreef op 20 februari 2003 @ 14:52:
Volgens mij zegt 'ie dat hij de OO-manier van denken niet als je-van-het beschouwt; omdat het hetzelfde resultaat oplevert als (procedureel ofwel) machine-conform denken. Ik kan me daar wel in vinden.
ik wilde hierop reageren, maar toen bleek dat whoami het al gezegd had:
whoami schreef op 20 February 2003 @ 14:54:
Tja, ik niet eigenlijk.
Het resultaat kan hetzelfde zijn, maar de manier waarop je ontwikkelt is anders. Als je OO ontwikkeld, dan kan je op een veel abstracter niveau bezig zijn, waardoor je je meer kan richten op functionaliteit.
OO 'denken' is gewoon een hele duidelijke manier van rangschikken van data en onderverdelen van verantwoordelijkheden. Dit levert nagenoeg meestal een onderhoudbaarder stuk software op. Bovendien is het ook makkelijker te hergebruiken, omdat het minder ingewikkeld in elkaar zit. En dan bedoel ik niet ingewikkeld in de zin van dat het moeilijker te begrijpen is, maar ingewikkeld in de zin van dat modules in je programma minder met elkaar zijn verweven, en dat je de scheidingslijn tussen die modules ook veel beter ziet. Ook is het makkelijker een bepaalde implementatie uit te breiden of een stukje software te schrijven wat makkelijk met de rest van het programma interfaced.
Neem bijvoorbeeld het verschil tussen C en C++ streams. In C zijn de streams altijd files. Je opent ze met fopen (), en je leest data met fread (). Het OS levert de verdere implementatie (verschil tussen console, echte files, named pipes, etc.), maar het blijven files. Je kunt niet in je C programma een eigen file stream schrijven die bijvoorbeeld bij een fread () uit een geheugenbuffer of een socket leest. Stel een bepaalde functie heeft een FILE * als argument, en je hebt je data in het geheugen staan. Dan moet je dus eerst de data naar een file schrijven, en dan met fopen () die file openen, zodat je de FILE * door kunt geven
Bij de C++ streams is er een superklasse, waarvoor je zelf de implementatie kunt schrijven. Natuurlijk zijn er filestreams die files openen, en console streams die van/naar console schrijven, maar je kunt ook heel gemakkelijk een eigen implementatie ervan maken die bijvoorbeeld van/naar een socket of geheugen leest, of een gecomprimeerde file bij het uitlezen uitpakt.
De functie van het vorige voorbeeld heeft nu een std::stream & als argument, en dat kan gewoon alles zijn. Je kunt een file meegeven, maar ook een geheugenstream, een socketstream, enzovoorts. Voor de functie blijft het hetzelfde: het is een stroom data, en waar die vandaan komt is niet interessant