Java (Playlist 2) OOP - ITA 10: ereditarietà - PARTE PRIMA

preview_player
Показать описание
Cos'è e cosa consente di fare l'ereditarietà, almeno nei suo tratti generali. Derivare una classe da una superclasse: i quadrati come classe derivata dai rettangoli. Aggiungere nella classe figlia costruttori che richiamano quelli della classe madre. Impossibilità per i metodi delle classi figlie di accedere direttamente ai membri privati delle loro super classi.

LEGAL
Il video contiene solo la registrazione con il mio commento audio (senza altri video, immagini o audio) di una sessione di lavoro con software liberamente scaricabili ed utilizzabili da chiunque. Il fine è esclusivamente didattico.

The video contains only the registration of my voice while I'm using only open source or freely downloadable software. No extra video, photos or audio. The goal is only educational.
Рекомендации по теме
Комментарии
Автор

2)tutti perchè potrebbe essere di pubblico interesse e soprattutto andrebbe a completare e a rendere più profonda la videoguida che sta realizzando. Mi scuso ancora: questo che le vorrei dare non vuole certo essere una pretesa ma un consiglio per risolvere due problemi in uno: rispondermi (sempre che ne sia a disposizione) e approfondire l'argomento che sta attualmente trattando nei suoi video. Arrivederci e complimenti per la chiarezza della sua esposizione. Grazie mille.

iosonopersia
Автор

1)Un ultima cosa: al limite, se fosse troppo lunga la risposta alla mia domanda potrebbe (se non sono troppo indiscreto e se ciò non va contro i suoi piani) "implementarla" nel suo prossimo video sulla OOP con Java. Ciò che potrebbe essere utile a me potrebbe pure esserlo per altri, dato che quello che le ho posto è un quesito che sorge spontaneo parlando di ereditarietà. Mi scusi davvero se le sono sembrato troppo invadente ma ho pensato che la nostra discussione sarebbe potuta essere estesa a

iosonopersia
Автор

No, mi fa piacere. Cercherò di ricordarmene per il prossimo video sulla OOP preparando magari un esempio

fcamuso
Автор

@fcamuso Prof, le volevo chiedere se può fare dei video sulle servlet, api, e swing perché ho notato che mancano

rogiglio
Автор

No: lo si può fare solo da figlia a diretta genitrice. Diversamente sarebbe possibile bypassare delle regole di integrità imposte nella classe intermedia.

fcamuso
Автор

Preferisco anche io la notazione in linea con l'intestazione che visivamente fa capire che ancor prima di iniziare ad eseguire il codice del costruttore della classe figlia si chiama quello della classe madre in modo che venga correttamente inizializzata la parte ereditata. In effetti mi sono dimenticato di sottolineare che "super" deve essere, se presente, la prima istruzione. Cercherò di ricordarmi di farlo nel prossimo video.

fcamuso
Автор

Innanzitutto grazie per la tempestività della sua risposta. Però in teoria per ereditarietà la classe C erediterebbe i metodi public e protected di B, che a sua volta li riceverebbe in eredità da A. Se il metodo o la variabile fossero dichiarati public o protected in A e in B il loro stato non fosse mutato per esempio dalla keyword "final" e avessi quindi il caso particolare in cui tali metodi o variabili siano effettivamente visibili in C, come dovrei fare per accedervi? Sono un po' confuso...

iosonopersia
Автор

Da come Java permette di scrivere il codice sembrerebbe che sia possibile chiamare prima il costruttore della classe figlia di quella madre. Cosa impossibile da fare.
C# non permette di usare "base" come qui si usa "super". Il compilatore Java prima di eseguire il costruttore della classe figlia deve controllare se come "primo" comando di questa c'è una chiamata a "super" per sapere quale costrittore della classe madre deve chiamare per primo.

GiovanniDeRosa
Автор

Salve. Ho una domandina. Se ho una classe C figlia di una B figlia a sua volta di una A, e volessi in C accedere ad un metodo A.metodo() di A, sarebbe giusto scrivere super.super.metodo()?

iosonopersia
Автор

Salve Prof.!
Non riesco a trovare la seconda parte di questo video....
Come mai ??

Grazie

mariomottula
Автор

salve prof. la 6 bis é infondo alla playlist
volevo chiedere se ha intenzione di rifare la playlist di php trattando anche l oop

giulianocortesi
Автор

Ah, forse ho capito. Non avrebbe senso implementare una classe nipote di una di cui devo usare direttamente i metodi e le variabili. In definitiva dovrei fare in modo che C sia figlia insieme a B della classe A, così da bypassare il problema. Ma la domanda rimane la stessa. Se per svariati motivi fossi costretto ad avere C figlia di B figlia A e dovessi fare ciò di cui ho già detto? É vero che java non permette di farlo? É perchè non ce n'è il bisogno o per una dimenticanza dei programmatori?

iosonopersia
Автор

e quella  della precisazione sui package e la visibilità delle variabili

giulianocortesi
Автор

Dai, cerco di prepararla entro stasera (TENTO) ;)

fcamuso
Автор

Salve professore; mi trovo a farle una domanda spinosa concettualmente:
Quali sono le regole che mi permettono di essere certo (per lo meno in Java) se una classe B debba ereditare una classe A
o, piuttosto, contenerla?


Provo a contornare la domanda con un esempio:

Sono state definite le classi:
- Card
- Card_Container /*generico contenitore di carte; indifferente l'implementazione scelta tra array o lista
la classe Card_Container possiede tutte le funzioni basilari di gestione come insert(position, card), remove(position).*/

Si deve definire la classe:
- Deck  /* appare scontato che un "Deck" debba contenere N carte, quindi deve far uso delle proprietà del tipo Card_Container. In questo caso sarebbe meglio che Deck derivi Card_Container o che Deck contenga un oggetto Card_Container? */

Ipotesi personale
Suppongo che, in questo caso, sia meglio che Deck abbia un attributo Card_Container (probabilmente privato) in modo che si possa accedere agli elementi di Deck con l'interfaccia (di metodi) appositamente creata, escludendo quella atomica fornita da Card_Container. 
Quest'ipotesi, però, mi sembra scorretta in termini di concetti, dato che ci si aspetterebbe che Deck sia un contenitore di carte e non qualcosa che "contiene" a sua volta un contenitore di carte.

giulian
Автор

Mi scusi Professore vorrei esprimere un mio punto di vista che possa essere condivisibile, oppure no.Lei ha concentarato la seconda parte della Playlist facendo riferimenti sulla Geometria Analitica redendo le lezioni sulla stessa linea.Cioè la mia impressione è che l'utente forse tende a prestare più attenzione alle problematiche degli Esercizi geometrici che, sulla parte degliOGGETTI OPP.Forse sarebbe stato meglio, essere più variegato.Mi scusi Professore è solo un mio punto di vista.

lucazero
Автор

Non mi è chiaro perché ha preferito creare quadrati(e rettangoli) in questo modo:
 
Quadrato q = new Quadrato(1, 1, 3);

piuttosto che in questo :
Quadrato q = new Quadrato(new Punto(1, 1), 3);

Passando quindi nei parametri direttamente l'oggetto punto e non le sue coordinate.

indianajones