Archief - [PROG] Design patterns voor procedurele talen

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.

passero

Legacy Member
In mijn vrije tijd programmeer ik constant in een OO taal (java, c#) en ik doe mijn best om de patterns te herkennen en zo goed mogelijk toe te passen. dit lukt me vrij goed...

Voor mijn job werk ik in een oracle omgeving (plsql), alhoewel die ook OO ondersteund maar in mindere mate, mag ik dat niet gebruiken omdat ik ver den enigste ben die de code zou snappen...
Nu zitten we echter veel met het probleem dat wanneer we code schrijven, heel veel zaken moeten aanpassen wanneer de klant van gedacht veranderd. Bij veel van die zaken merk ik dat we het werk serieus kunnen vermijden door gebruik te maken van patterns...
vandaar deze vraag... bestaan gelijkaardige zaken voor procedurele talen? Beschrijvingen van problemen die veel voorkomen die eventueel een flowchart beschrijven zodat de code overzichtelijk en flexibel blijft.

Messias.

Legacy Member
Mja, lijkt mij eerder dat er een mentaliteitswijziging en bijkomende opleiding nodig is daar in dat bedrijf. :s

Vich

Legacy Member
't Is misschien niet een direct antwoord op je vraag, maar:

Ik denk dat vooral het probleem is dat je collega's niet het hetzelfde niveau hebben als jij en dat jij je vaardigheden dus niet ten volle kan gebruiken. Als ik jou was dan zou ik concrete/praktische voorbeelden opschrijven waarom het beter is om met jouw methode te werken en hoe dit de baas geld/tijd kan sparen of de klant tevreden kan stellen.
Je baas zou er eventueel voor kunnen zorgen dat je collega's bijscholing krijgen opdat ze de patterns die je implementeert en de OO denkwijze ook kunnen begrijpen.
Het nadeel is dat het op korte termijn de baas geld kost ivm opleiding/training, maar op lange termijn lijkt me het toch een betere oplossing.

Ik zou dus m'n baas proberen laten inzien dat het fout is om vooruitgang te remmen omdat collega's niet kunnen volgen.

passero

Legacy Member
ik stel me eigenlijk ook de vraag wat men deed voor OO en design patterns...

procedurele talen zijn er toch altijd al geweest en ik kan me moeilijk voorstellen dat daar geen "theoriën" rond zijn om deftig code te schrijven. Ik heb een OO opleiding genoten, volledig in java waardoor (ik geef dat gerust toe) niet echt rendabele code schrijf in een strict procedurele omgeving.

er moeten daar toch ook richtlijnen ofzo rond zijn om herbruikbaarheid te stimuleren. Ik kan me dat moeilijk voorstellen dat in al die jaren van development niemand zo iets bedacht of uitgewerkt heeft en omgezet in boek of cursus ofzo....

Tyfius

Legacy Member
In niet object geörienteerde talen zoals bijvoorbeeld C gaat men eerder modulair werken en wordt er zeer veel gebruik gemaakt van structs. Op die manier kan men toch een beetje het object geörienteerde van talen zoals C++, Java en C# benaderen.

Kijk op SourceForge eens naar API's en frameworks die in C werden ontwikkeld om een beter beeld te krijgen.

Messias.

Legacy Member
Inderdaad, in de Linux-kernel wordt op dergelijke manier ook modulair gewerkt. Vraag me niet hoe dat exact in elkaar zit, ik ben een C-noob en heb er enkel een artikel over gelezen.

Vich

Legacy Member
De boeken zijn er wel. Dit is een goed voorbeeld voor OO C programming:
http://www.planetpdf.com/codecuts/pdfs/ooc.pdf
Meer staat hier:
http://www.google.com/search?q=obje...&rls=org.mozilla:nl:official&client=firefox-a

[edit] Maar het komt er op neer dat je een compound/struct maakt en een reeks functies. Die struct bevat dan al je klassemembers en wordt aan elke functie meegegeven. Zoiets:

Code:
struct List
{
    ListItem* mBegin;
    ListItem* mEnd;
};

void List_Add(IntList*&ioList, Item inItem)
{
...
}

void List_Clear(IntList& ioList)
{
...
}

void List_Add(IntList& ioList, Item inItem)
{
...
}

Ziedaar, een soort van klasse :)

Moto

Legacy Member
ik stel me eigenlijk ook de vraag wat men deed voor OO en design patterns...
:rofl:

Mja heb in het begin wat vb6 gedaan is ook geen echte OO taal, maar om te zeggen dat er pure chaos was zonder OO en design patterns, ook niet echt

Nu dat waren wel simpele client-server 3 tier toestanden, daar zijn design patterns niet echt nodig.
Gewoon goed gestructureerd uw code maken, veel library classes met functions enzo, zodat veel voorkomende code op 1 plek zit.

En die ontwikkeling van die apps gingen vrij goed ze, sommige wijzigingen duren idd langer, maar zijn meestal zeer straight forward.
Bij OO + design patterns zijn op het einde uw wijzigingen wel sneller gedaan, maar om een goede basis te bouwen zijt ge meestal wel langer bezig

killgore

Legacy Member
passero zei:
ik stel me eigenlijk ook de vraag wat men deed voor OO en design patterns...

procedurele talen zijn er toch altijd al geweest en ik kan me moeilijk voorstellen dat daar geen "theoriën" rond zijn om deftig code te schrijven. Ik heb een OO opleiding genoten, volledig in java waardoor (ik geef dat gerust toe) niet echt rendabele code schrijf in een strict procedurele omgeving.

er moeten daar toch ook richtlijnen ofzo rond zijn om herbruikbaarheid te stimuleren. Ik kan me dat moeilijk voorstellen dat in al die jaren van development niemand zo iets bedacht of uitgewerkt heeft en omgezet in boek of cursus ofzo....
Je moet rekening houden met het feit dat OO al langer bestaat als je denkt. OO wert in de jaren 80 uitgevonden, Design patterns maakten hun intrede met GoF in 1994. Al langer dan de meeste mensen denken dus.

De reden dat beide concepten ontstaan zijn is juist wat jouw probleem is: men kwam met slecht gestructureerde programma's die veel aanpassingswerk & weinig herbruikbaarheid als voornaamste slechte kenmerken hadden.

De voornaamste reden waarom ze dit in het begin niet nodig hadden was dat men toen toekwam met eerst de basis modulaire technieken (enkele functies) en daarna de uitgebreidere modulaire technieken dmv bijvoorbeeld structs. Toen die niet meer voldeden en het een vrij grote chaos werd bij grote projecten schakelde men stilaan over naar OOP. Maar vergis u niet: procedurele talen bleven op sommige vlakken nog zeer persistent, Quake 3 bijvoorbeeld werd nog volledig in c ipv c++ geschreven, terwijl dat al goed eind jaren 90 was.

Tyfius zei:
In niet object geörienteerde talen zoals bijvoorbeeld C gaat men eerder modulair werken en wordt er zeer veel gebruik gemaakt van structs. Op die manier kan men toch een beetje het object geörienteerde van talen zoals C++, Java en C# benaderen.

Kijk op SourceForge eens naar API's en frameworks die in C werden ontwikkeld om een beter beeld te krijgen.
Het modulair programmeren vind ik voor kleinere api's en libs vaak zelfs een betere aanpak. Je kan deze c-modulariteit mooi doortrekken naar c++ voor "mooiere" code, maar meer ook niet zonder gebruik te maken van alle design patterns e.d.

Het gevaar met alle oo-opties en designpatterns en dergelijke is dat je zéér snel tot overdesign kan komen. Dat is iets wat je bij eenvoudig modulair programmeren minder snel zal tegenkomen.

Ook zijn patterns op sommige levels overroepen. Ik deed sommige zaken die mensen een "pattern" noemen automatisch voor ik nog maar van design patterns gehoord had. Sommige zogenaamde patterns komen voornamelijk aan op je gezond verstand gebruiken.

Vich zei:
[edit] Maar het komt er op neer dat je een compound/struct maakt en een reeks functies. Die struct bevat dan al je klassemembers en wordt aan elke functie meegegeven. Zoiets:

Code:
struct List
{
    ListItem* mBegin;
    ListItem* mEnd;
};

void List_Add(IntList*&ioList, Item inItem)
{
...
}

void List_Clear(IntList& ioList)
{
...
}

void List_Add(IntList& ioList, Item inItem)
{
...
}

Ziedaar, een soort van klasse :)

Uiteindelijk zal zelfs een klasse naar dergelijke code worden omgezet (toch in C++). Overerving, afscherming, constructors, ... zijn allemaal "specialiteiten" die zich eigenlijk enkel op compiler niveau afspelen, op machinetaal niveau bestaat dit helemaal niet. Je methoden zullen dus in machinetaal omgezet worden naar gewone functies die als argument het adres van je klassevariabelen zullen krijgen.
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