Classe astratta e composizione

di il
5 risposte

Classe astratta e composizione

Salve

Mi sono inventato un testo per capire meglio l'utilità delle classi astratte in java ma credo sia valido anche per altri linguaggi oop
Quello che ho letto fin'ora dice sempre la stessa cosa ovvero come crearle, ma non ho capito quando
vi riporto il testo

La storia inizia con una idea di oggetto vuoto senza alcuna proprietà.
L'oggetto appartiene alla classe Object è avrà sempre una visuale in tutti e quattro i punti cardinali e potrà contenere
al suo interno un altro oggetto derivato da Object.
In ogni direzione è possibile trovare un altro oggetto di tipo Object derivato

Gli oggetti derivati da Object non sono tutti uguali perchè possono avere proprietà e metodi differenti ,
ma avranno sempre tutti proprietà e metodi per set/get dei punti cardinali e riferimento all'oggetto che contengono o meno.

esempi di classi che estendono Object :
piastrella 
sedia 
penna 
scatola di cartone

Un scenario come esempio:

Sedia è sulla piastrella.
Penna è sulla sedia
A est di sedia c'è un'altra piastrella con sopra una scatola di cartone
Cosa vorrei fare io:
1) Object non sarà mai istanziato , ma al contrario istanzierò solo le sue sottoclassi.
Ha senso dichiarare Object astratto ?

2) Eredito da Object e creo tutte le classi basate sugli oggetti che voglio creare.
Per fare in modo che un oggetto contenga un altro oggetto , posso utilizzare la composizione?

Se la spiegazione è confusa fatemelo sapere per cortesia
Grazie

5 Risposte

  • Re: Classe astratta e composizione

    None ha scritto:


    Mi sono inventato un testo per capire meglio l'utilità delle classi astratte in java ma credo sia valido anche per altri linguaggi oop
    Quello che ho letto fin'ora dice sempre la stessa cosa ovvero come crearle, ma non ho capito quando

    Se la spiegazione è confusa fatemelo sapere per cortesia
    Sì mi sembra un po' confusa. Comunque: ci possono essere diversi motivi per rendere una classe astratta ma generalmente il motivo più "tipico" è che la classe rappresenta un concetto molto generalizzato e appunto "astratto". Si possono fare diversi esempi:

    - classe astratta Animale con sottoclassi "concrete" Cane, Gatto, ecc...
    - classe astratta Solido con sottoclassi "concrete" Cubo, Sfera, ecc...
    - classe astratta Veicolo con sottoclassi "concrete" Automobile, Moto, ecc...

    Se non l'hai già fatto, prova il "classico" esercizio della gerarchia dei solidi, dove Solido è astratto e ha i metodi double calcolaSuperficie() e double calcolaVolume() astratti che poi saranno implementati dalle sottoclassi concrete. Se vuoi, similarmente, la gerarchia delle figure piane.
  • Re: Classe astratta e composizione

    ma non ho capito quando
    Una classe astratta serve quando vuoi andare a modellizzare un insieme di entità che hanno in comune dei comportamenti;
    Gli oggetti derivati da Object non sono tutti uguali perchè possono avere proprietà e metodi differenti
    infatti una classe astratta ha metodi astratti senza corpo ,proprio per "specializzare" ogni classe con specifici comportamenti quando farai l'override del metodo.

    Per capire le classi astratte basterebbero dei semplici esempi tipo : classe astratta animale con cane gatto cammello che fanno versi diversi
    oppure qualcosa con forme geometriche.
    Per fare in modo che un oggetto contenga un altro oggetto
    Nel costruttore del tuo baseObject puoi mettere una paramentro di istanza di tipo baseObject


    Cmq secondo me è meglio usare un Factory Method
  • Re: Classe astratta e composizione

    federaimondi ha scritto:


    quando vuoi andare a modellizzare un insieme di entità che hanno in comune dei comportamenti
    Questo è il concetto generale di "super classe" (o più genericamente ancora "super tipo").

    federaimondi ha scritto:


    infatti una classe astratta ha metodi astratti senza corpo
    Giusto per precisare: una classe astratta può anche non avere metodi astratti.
  • Re: Classe astratta e composizione

    Giusto per precisare: una classe astratta può anche non avere metodi astratti.
    Non fa una piega
  • Re: Classe astratta e composizione

    Ciao
    Allora grazie per le risposte. Si se prendiamo ad esempio le figure geometriche è più semplice, ma questa volta ho voluto applicare
    quel concetto a qualcosa che non sia il solito esempio e verificare quello che ho capito.
    Credo che nel mio caso Object sia astratto.
    Credo anche che dopo aver studiato le basi dell'oop dovrò anche studiare i patterns
Devi accedere o registrarti per scrivere nel forum
5 risposte