CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Objectoriëntatie - Wikipedia

Objectoriëntatie

Objectoriëntatie of OO is de zienswijze die gebruikt wordt bij het objectgeoriënteerd programmeren. Bij deze benadering wordt programmatuur opgebouwd als een verzameling van interagerende objecten die elk behoren tot een soort of klasse. Objecten spelen de rol die variabelen spelen in klassieke programmatuur. De klassen daarentegen spelen de rol van de types.

Inhoud

[bewerk] Algemeen

Het keurslijf van een object wordt een klasse (Engels: class) genoemd. De klasse is de blauwdruk voor elk object van die klasse. Een specifiek object is dus altijd een instantie van een bepaalde klasse. Anders gezegd: de tafel waaraan u nu zit is een object, en deze is van de klasse tafel. De termen klasse en object worden vaak door elkaar gebruikt, soms ten onrechte.

In een klasse wordt

  1. door middel van attributen vastgelegd wat de morfologie is van de objecten die tot die klasse behoren, m.a.w. hun vormelijke kenmerken;
  2. door middel van methoden alle potentiële gedragingen van die objecten geprogrammeerd - berekeningen, bewerkingen, acties, replieken etc. (functies in klassieke programmeertalen).

In principe geldt op het niveau van het object inkapseling, de attributen zijn niet opvraagbaar of wijzigbaar tenzij gebruikgemaakt wordt van de methoden die informatie geven of de interne toestand van het object wijzigen.

Objectgeoriënteerd programmeren onderscheidt zich van procedureel programmeren door de uitermate grote modulariteit in de opbouw van software (er worden in feite geen programma's meer geschreven maar enkel op zich staande klassen of hiërarchieën van klassen) en in principe onbeperkte herbruikbaarheid: om een bepaald probleem softwarematig op te lossen neemt men de nodige bestaande klassen (onderdelen), en brengt die samen in een nieuwe klasse (de oplossing).

[bewerk] Inkapseling

Inkapseling (Engels: encapsulation) is wat objectoriëntatie onderscheidt van procedureel programmeren. Een object bestaat uit een hoeveelheid data en de bewerkingen daarop. De data is echter niet rechtstreeks te benaderen (bij goede OO althans) maar moet via methoden (en eventueel properties, een soort methoden) opgevraagd en gemanipuleerd worden. Hierdoor is het mogelijk de implementatie van een klasse aan te passen, zonder dat de programmatuur die deze klasse gebruikt dit merkt. Belangrijk is ook dat ingewikkelde zaken voor de gebruiker van de klasse verborgen blijven. Dit is met OO een stuk eenvoudiger dan met procedureel programmeren.

[bewerk] Overerving (Inheritance)

Een van de krachtige instrumenten van OO is de mogelijkheid tot hiërarchische classificatie (een moeilijke bezigheid zo leert ons Wikipedia). Een superklasse op het hoogste niveau kan - meerdere lagen diep - opgesplitst worden in deelklassen. Daarbij 'erft' (de term 'accumuleert' geeft beter aan wat werkelijk gebeurt dan 'erft' maar is niet ingeburgerd) elke klasse op het laagste niveau alle attributen en methoden van de klassen op de hogere niveaus. Dat mechanisme noemen we overerving (inheritance).

Inheritance laat ook toe varianten van klassen te maken (we spreken dan van basis- en afgeleide klassen). Aangezien de regel geldt dat een afgeleide klasse steeds in de plaats kan treden van een basisklasse ontstaat daardoor ruimte voor polymorfie.

[bewerk] OO Programming Structure

OOPS is niet eenvoudig, vooral voor programmeurs die gewend zijn procedureel te programmeren. De OO-ontwerper verzamelt eerst alle mogelijke reeds bestaande klassen die inzetbaar zijn in het domein waarvoor hij/zij software ontwerpt. Die smeedt hij/zij aan elkaar door middel van nieuwe of afgeleide klassen tot de uiteindelijke applicatie: in wezen niets meer dan de creatie van één object van de applicatieklasse.

Er zijn programmeurs die het OOPS-model verwerpen en vinden dat het procedureel programmeren de voorkeur heeft. Anderen zijn eerder geneigd een uitgebreide library aan klassen te gebruiken en deze d.m.v. procedurele code samen te laten werken.

[bewerk] Programmeertalen

Voorbeelden van objectgeoriënteerde talen zijn:

Voorbeelden van lineaire talen zijn:

[bewerk] Codevoorbeeld

Voorbeeld van een klasse Cirkel. De klassen cGetal, cEenheid, cPunt-in-vlak, cLengte-in-Eenheid, etc. worden als bestaand beschouwd.

klasse cCirkel
 privaat: straal = cLengte-in-Eenheid
  het enige attribuut, ingekapseld
 publiek:
  constructoren: (dienen om een nieuw object te maken)
   cCirkel(cLengte-in-eenheid s)
     straal=s
   cCirkel(cGetal l, cEenheid e)
     straal=nieuw cLengte-in-eenheid(l, e)
     maakt met l en e een nieuw cLengte-in-eenheid-object
  informant: (dienen om info over het object te vragen)
   Straal? antwoord: straal als cLengte-in-eenheid-object
  veredelaars: (veredelen de informatie van een object)
   Oppervlakte? 
     cGetal o=pi*(straal->Lengte?)**2
     cEenheid e=(straal->Eenheid?)->Kwadrateer
     antwoord: nieuw cOppervl-in-eenheid(o, e)
   Omtrek? 
     cGetal o=2*pi*(straal->Lengte?
     antwoord: nieuw cLengte-in-eenheid(o, straal->Eenheid?
  manipulator:
   HerschaalNaar(cEenheid e)
     straal->HerschaalNaar(e)
   HerschaalMet (cGetal g)
     straal->HerschaalMet (g)
     
klasse cCirkel-in-vlak erft van cCirkel
 privaat: middelpunt = cPunt-in-vlak
  de straal komt in de basisklasse
 publiek
  constructoren:
   cCirkel-in-vlak(cPunt-in-vlak p, cLengte-in-eenheid l)
     cCirkel (l)
     middelpunt = p
   cCirkel-in-vlak(cPunt-in-vlak p1, cPunt-in-vlak p2,
           cPunt-in-vlak p3, cEenheid e)
     (moet uit de drie punten de straal en het middelpunt berekenen)      
  informanten: 
   Middelpunt? antwoord: middelpunt als cPunt-in-vlak
  veredeling: (wordt overgeërfd)
  manipulator: (wordt overgeërfd)
  regisseur:
   Teken 
     (tekent de cirkel)


[bewerk] Voor- en nadelen

Objectgeoriënteerd programmeren kan de herbruikbaarheid van code sterk vergroten. Toch is de in de jaren 90 beoogde herbruikbaarheid van zakenobjecten nooit helemaal waargemaakt. De herbruikbaarheid heeft zich voornamelijk bewezen voor technische objecten. Bijkomend voordeel hiervan is dat fouten maar op één plaats voorkomen. Bij OO programmeren wordt veel minder vaak code gekopieerd dan bij andere methoden.

De grootste verdienste van OO is waarschijnlijk de inkapseling en de interface van klassen/objecten. Hierdoor is het mogelijk geworden omvangrijke programmatuur goed onderhoudbaar te maken. Met puur structureel programmeren is dit een ware heksentoer.

Nadelen kleven er ook aan: als de structuur van begin af aan niet goed is opgezet, kan op een gegeven moment de overerving tegen de programmeur gaan werken. Vaak gebeurt dit als van tevoren niet duidelijk was wat de uiteindelijke structuur zou zijn.

In de praktijk gebeurt het veel dat ervaren programmeurs de objectdeclaraties ontwerpen, en dat de (relatief) onervaren programmeurs de feitelijke code invullen.

[bewerk] Objectgeoriënteerde gebruikersinterface

Een geheel ander soort objectgeoriënteerdheid treft men aan in de objectgeoriënteerde gebruikersinterface. Dit is een vorm van een grafische gebruikersinterface waarbij de nadruk niet ligt op de programma's die gebruikt worden om taken uit te voeren, maar op de documenten of bestanden waarmee men werkt. De Workplace Shell van OS/2 is een voorbeeld van een dergelijke interface.

[bewerk] Zie ook

 
Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com