Java en Encapsulatie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 08:01
Ik ben een programmeur die begonnen is met C op school en de laatste jaren op werk vooral te maken heeft gehad met C++. De laatste tijd probeer ik met wat zelfstudie kennis te maken met Java(FX). Ik snap echter nog niet helemaal hoe het zit met encapsulatie.
Wat ik ervan begrepen heb is het een onderdeel van OO om de data en functies samen te voegen en daarnaast voorkomt het dat het niet mogelijk om de state van de members te wijzigen buiten het object (dat de members bevat) om.

In C++ hebben wij de vuistregel dat functies enkel const references naar een member mogen retourneren. In java zie ik echter regelmatig iets dergelijks gebeuren:
code:
1
something.getData().doSomethingThatChangesTheStateOfData()

De functie getData() retourneert hier een referentie naar een intern object waarop vervolgens functies aangeroepen kunnen worden die de state van het interne object veranderen.

Gaat dat niet in tegen het principe van encapsulatie? Of hoe moet ik dat zien?

[ Voor 4% gewijzigd door Gehakt op 30-07-2012 21:42 ]


Acties:
  • 0 Henk 'm!

  • MikeN
  • Registratie: April 2001
  • Laatst online: 11-09 19:11
Ja, en het zou niet horen in veel gevallen (zeker niet bij collections en dergelijke). Zoek ook op 'defensive copying', en zaken als unmodifiable collections: http://docs.oracle.com/ja...ion(java.util.Collection)

Acties:
  • 0 Henk 'm!

  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 08:01
Dank je voor de link. Ik vind het wel apart dat er blijkbaar dus toch enkele knappe koppen hebben besloten om die regel te breken terwijl ik altijd hoor dat Java een erg goede OO taal is.

Acties:
  • 0 Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21-08 23:06

HMS

Gehakt schreef op dinsdag 31 juli 2012 @ 16:45:
Dank je voor de link. Ik vind het wel apart dat er blijkbaar dus toch enkele knappe koppen hebben besloten om die regel te breken terwijl ik altijd hoor dat Java een erg goede OO taal is.
Een cirkelzaag is ook een handig stuk gereedschap, toch zagen mensen hun vingers er wel eens mee af.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Gehakt schreef op dinsdag 31 juli 2012 @ 16:45:
Dank je voor de link. Ik vind het wel apart dat er blijkbaar dus toch enkele knappe koppen hebben besloten om die regel te breken terwijl ik altijd hoor dat Java een erg goede OO taal is.
Dat je iets in principe niet zou moeten doen betekent niet dat je het per definitie nooit mag doen. Er zijn voor elke constructie wel argumenten te verzinnen waarom je tóch kiest voor iets dat onder andere omstandigheden een slecht plan zou zijn geweest.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.