Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    114

    [JAVA] Creazione oggetto con costruttore....

    Mi potete spiegare perchè quando si istanzia una classe certe volte si usa sta forma:

    Esempio:

    B classe
    A superclasse di B

    A nomeogg = new B();

    perchè si usa il costruttore della sottoclasse se istanzio la superclasse??

    Stessa cosa:

    A interfaccia
    B classe che implementa l interfaccia

    A nomeogg = new B();

    Ci sarà qualche motivo per ste cose

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Certo.
    Il motivo è prettamente didattico!
    Quasi mai nella realtà troverai istruzioni simili (sono rare).

    Ad ogni modo, cerchiamo di spiegare perchè si può fare sta cosa.

    La motivazione risiede in uno dei cardini della programmazione Object Oriented: l'ereditarietà.
    Quando io estendo una classe, non faccio altro che specializzarla: ovvero sto costruendo una forma particolare della prima classe.

    Esempio: se ho la classe Figura e la estendo creando la classe Quadrato, sto dicendo che il Quadrato è una particolare Figura. Ovvero è una figura che ha "qualcosa di diverso" dalle altre figure, qualche caratteristica in più e, magari, anche qualcuna in meno, ma comunque ha delle caratteristiche diverse, pur essendo a tutti gli effetti una Figura.

    Quando utilizzo, quindi, questa istruzione
    codice:
    Figura fig = new Quadrato();
    dico che sto costruendo una Figura (che chiamo fig), la quale è un Quadrato. Dato che il Quadrato è una figura, è lecito utilizzare questa istruzione.

    In questo caso, però, so di aver costruito un quadrato, ma lo voglio trattare alla stregua di una qualsiasi figura e voglio che il mio programma non si preoccupi affatto di che tipo di figura sia, ma si "accontenti di sapere" che è una figura.

    Lo stesso vale per le interfaccie: l'interfaccia è solo un modo escogitato dal linguaggio Java per sopperire alla mancanza dell'ereditarietà multipla, ma in sostanza il concetto rimane esattamente lo stesso. Un'interfaccia può essere vista benissimo come una classe. (prendila con le pinze, quest'ultima affermazione)

    Spero di averti chiarito un po' le idee... e immagino anche che in futuro ti rivedrò qui sul forum con una domanda concernente il polimorfismo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Per scopo didattico, come detto. Cmq di solito si può fare in quel modo, dato che le classi devono (dovrebbero) soddisfare il principio di liskov

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    114
    Il motvo per il quale è possibile fare na cosa del genere mi era chiaro.. adesso ancora di piu'.

    Non capivo l utilità

    Grazie Lele

    Cià

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    L'utilità ti sarà più chiara più avanti, quando comincerai a vedere i primi esempi di polimorfismo.

    Per ora, puoi immaginare che un programma possa avere bisogno di trattare con tanti oggetti di tipo diverso, ma tutti accomunati da un particolare.

    Rimango nell'esempio della Figura.
    Supponiamo di avere la classe Figura, la quale è ereditata da tante sottoclassi:
    • Rettangolo
    • Triangolo
    • Trapezio
    • Cerchio

    immaginiamo anche che il Quadrato di prima possa essere un'estensione della classe Rettangolo (infatti un quadrato è un particolare rettangolo ).
    Ora... se il programma deve calcolare l'area di tutte queste figure si può procedere in due modi:

    1) Prevedere un metodo per ciascuna casistica (uno per i rettangoli, uno per i triangoli, uno per i cerchi...): ogni figura ha un modo diverso per il calcolo dell'area...

    2) Prevedere un metodo uguale per tutte le casistiche: sarà ciascuna classe a implementarlo nel modo appropriato (nel Triangolo uso la formula del triangolo, nel Rettangolo quella del rettangolo...)

    E' chiaro che il secondo metodo fa risparmiare un sacco di codice: il programma prende in pasto un oggetto Figura (generico) e dice a quella figura di calcolare l'area... senza preoccuparsi di che tipo di figura è

    Questo è uno dei vantaggi più importanti dell'ereditarietà.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.