SCJP Sun Certified Programmer for Java 6 Study Guide – Object Orientation

Object Orientation

Encapsulation (Exam Objective 5.1)

Il beneficio chiave dell’encapsulation è la possibilità di cambiare il codice di determinate classi, senza danneggiare altre classi che vi fanno riferimento.

Per ottenere questo beneficio è necessario nascondere i dettagli dell’implementazione dietro a una interfaccia pubblica. In questo caso, per interfaccia si intende un insieme di metodi accessibili dall’esterno, in pratica l’API del codice. Nascondendo i dettagli implementativi, si possono apportare modifiche sul codice senza forzare cambiamenti nel codice che lo chiama.
Un design che tiene conto dell’encapsulation permette di ottenere mantenibilità, flessibilità ed estensibilità.
Come implementare l’encapsulation:

  • mantenere le variabili di istanza private,
  • esporre metodi di accesso pubblici e forzare il codice chiamante a usare questi metodi invece delle di usare direttamente le variabili di istanza,
  • per i metodi, utilizzare la naming convention dei JavaBean (set<someProperty>, get<someProperty>).

Inheritance, Is-A, Has-A (Exam Objective 5.5)

Ogni classe Java è una sottoclasse della classe Object, quindi ogni classe, presente e futura, erediterà da Object.
Per l’esame è necessario sapere che si possono creare relazioni di ereditarietà estendendo una classe. E’ anche importante capire quali sono le due ragioni principali per usare l’ereditarietà:
1) promuovere il riuso del codice
2) usare il polimorfismo.

Riuso: un comune approccio di design è quello di creare classi base che espongano funzionalità comuni a un insieme di oggetti, per poi creare sottoclassi più specializzate che ereditino da essa. Il riuso del codice attraverso l’ereditarietà significa che metodi con funzionalità generiche non necessitano di essere re-implementati in più classi.

Polimorfismo: usando l’ereditarietà si può accedere alla classi in modo polimorfico, vale a dire che ogni sottoclasse può essere trattata come la classe padre.

IS-A and HAS-A Relationships
Per l’esame è necessario saper riconoscere se il codice implementa una relazione IS-A o una relazione HAS-A.

  • IS-A
    • Una relazione IS-A è un modo per dire “questa cosa è del tipo di questa altra cosa”, si può esprimere
      implementando l’ereditarietà fra classi (attraverso la parola chiave “extends”) o con l’implementazione di interfaccie (attraverso la parola chiave “implements”)
  • HAS-A
    • La relazione HAS-A è basata sull’uso, invece che sulla ereditarietà. In altre parole, la classe A HAS-A B se il codice nella classe A fa riferimento ad una istanza della classe B.

Polymorphism (Exam Objective 5.2)

Escludendo gli oggetti di tipo Object, tutti gli oggetti java sono polimorfici se passano il test della relazione IS-A per il loro stesso tipo e per la classe Object.

Da ricordare che l’unico modo per accedere ad un oggetto è attraverso reference variable, e ci sono dei concetti chiave da tenere a mente:

  • Una reference variable può essere solo di un tipo e, una volta dichiarato, questo tipo non può mai essere cambiato.
  • Una reference è una variabile, quindi può essere re-assegnata ad altri oggetti (a meno che non sia dichiarata final).
  • Il tipo della reference variable determina i metodi che possono essere invocati sull’oggetto a cui la variabile fa riferimento.
  • Una reference variable può rappresentare un oggetto dello stesso tipo del tipo dichiarato per la reference o ogni sottotipo del tipo dichiarato.
  • Il tipo dichiarato di una reference variable può essere una classe o una interfaccia. Se il tipo è un’interfaccia può indicare ogni oggetti di ogni classe che implementa tale interfaccia.
Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...