Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965

    [OOP] - Quando creare sottoclassi

    Esempio.

    Io ho una classe "Motore".
    Un motore è formato da diverse componenti: batteria, cilindro, candela, albero motore etc...
    Quindi ci sarà una classe per ogni componente.

    Le classi componenti, nella gerarchia, sono allo stesso livello della classe "Motore" ? oppure sono sottoclassi ?

    La "batteria" non è una specializzazione della classe "motore", è un componente.
    E' anche vero che il motore è una visione astratta dei componenti.

    Però, mi pare una regola troppo rigida.
    Ecco la domanda: fino a che punto bisogna ricercare la relazione "is a" per la definizione di sottoclassi ?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Si tratta del classico esempio di composizione.

    Il fatto che Motore e ComponenteX derivino dalla stessa classe base, in fondo, non è importante.

    Ciò che è importante nel modo più assoluto è evitare di derivare la classe Motore usando una delle classi ComponenteX come classe di base, in quanto è più consono agire per composizione e creare all'interno di un'ipotetica classe Motore un'istanza delle classi cui fanno campo i singoli componente (seguendo il tuo esempio, Batteria, Cilindri, Candele, ecc.).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Beh, è sottointeso che Motore non derivi dai componenti.

    Comunque OK.

    Ma i componenti devono essere sottoclassi di Motore o essere allo stesso livello gerarchico?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da keratox
    Beh, è sottointeso che Motore non derivi dai componenti.
    Ma anche il viceversa: è su questo che ponevo l'accento.

    Originariamente inviato da keratox
    Ma i componenti devono essere sottoclassi di Motore o essere allo stesso livello gerarchico?
    No, i componenti non devono senz'altro discendere da Motore, non avrebbe senso: come potrebbe una Batteria derivare da Motore?

    Poi, se desideri che sia Motore che Batteria, per fare un esempio, derivino tutti da una classe base comune, è indifferente.

    Non sono sicuro di aver capito cosa intendi con "allo stesso livello gerarchico".

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Ooook Perfetto.

    Ho capito.

    Quindi alla fine bisogna essere rigidi nell'utilizzo della relazione "is a".

    Grazie

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da keratox
    Quindi alla fine bisogna essere rigidi nell'utilizzo della relazione "is a".
    Rigidi? Diciamo che è utile usare l'ereditarietà quando, logicamente, puoi sostituire una classe con un'altra tranquillamente.

    Darei peso, insomma, al legame logico piuttosto che estremizzare il riutilizzo del codice, benché quest'ultimo sia uno dei vantaggi maggiori della OOP.

    Per esemplificare, non erediterei dalla stessa classe base una Lampadina e un Televisore solo perché entrambi hanno un metodo "Accendi": benché affine nel significato, viene implementato in modo radicalmente diverso, constatando che non sono intercambiabili nella maggior parte dei casi, come invece potrebbero esserlo la definizione più generica di Elettrodomestico e Frigorifero, ad esempio.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.