Föredra composition framför arv

  • Författare
  • Meddelande
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10074
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Föredra composition framför arv

Inlägg15 maj 2018, 11:22

Läste följande i en redovisningstext i oophp.
Jag insåg att jag inte riktigt förstått när man bör använda arv och när man bör använda komposition när jag läste det avsnittet i kmom02. Läste lite mer om ämnet nu och blev kanske lite klokare. Den allmänna åsikten verkar vara att man ska “favour composition over inheritance”.


Det stämmer att det finns ett talesätt som säger "favour composition over inheritance" som ber oss att hellre använda komposition av objekt än att göra längre arvskedjor.

Häromdagen läste jag på Reddit/php en artikel om "Do you guys use 'final' on classes and methods?". Nyckelordet final säger att en klass inte kan utökas (extend/ärvas) eller att en metod inte kan omdeklareras i en subklass. Tanken är att man säger till sin omgivning att "back off", våga inte att ärva min klass eller omdeklarera min metod, men du får gärna använda den (komposition) via dess publika API.

I Reddit-tråden hänvisas till artikeln "When to declare classes final" som argumenterar kring varför man nästan alltid skall använda final på klasser.

I artikel refereras till följande kompletterande artiklar.
* "Final Classes: Open for Extension, Closed for Inheritance"
* "Why extends is evil"
* "Using the “final” modifier whenever applicable in Java"

Man kan sammanfatta det med ett synsätt mot att "favour composition over inheritance" och artiklarna ger en del insyn i "varför" de tänker på det viset.

Man kan se konceptet med final som en variant av defensive programming, när man prioriterar att skydda sig och sin kod från icke önskvärda användningssätt (i sammhanget gällde det alltså arv/extends och omdefinitioner av metoder).
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Bing [Bot] och 20 gäster