Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    Domanda sulla programmazione ad oggetti

    Supponiamo che debba creare un menu grafico per un programma

    Il menu ha i tasti per fare le operazioni classiche tipo:
    apri file
    salva con nome
    ecc..

    Per la crerazione di questo menu si può procedere in due modi, volevo sapere qual'è la migliore

    1° modo

    Creo una classe "Menu", nel costruttore della classe definisco tutti i pulsanti di cui ho bisogno.
    Quando avrò bisogno del menu crerò un'istanza di questa classe

    2° modo

    Creo una classe "Menu", con costruttore vuoto. Creo un metodo statico "makeMenu" che definisce tutti i pulsanti di cui ho bisogno
    Quando avrò bisogno del menu, chiamerò il metodo statico "makeMenu".

    Ecco le domande:
    1) Secondo voi tutti e due i modi sono corretti da un punto di vista di programmazione ad oggetti?
    2) Qual'è il migliore? Io penso il secondo modo perchè non si istanzia nessun oggetto e quindi occupo meno risorse. O sbaglio?
    3) Usare metodi statici è una cosa da fare nella programmazione oppure è sconsigliato per qualche motivo?
    4) I metodi statici occupano più risorse dei metodi non statici?
    5) I metodi statici sono più lenti dei metodi non statici?

    Thx per le risposte

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Utilizzando il metodo statico puoi solo accedere a campi statici della classe che sono quindi condivisi da tuttte le istanza dellla classe, se devi creare un solo menu va bene, ma se ne devi creare piu di uno no.

    Ciao

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Re: Domanda sulla programmazione ad oggetti

    Originariamente inviato da abcd1000
    Ecco le domande:
    1) Secondo voi tutti e due i modi sono corretti da un punto di vista di programmazione ad oggetti?
    A mio avviso, i due metodi che hai presentato sono uguali, a livello logico, poichè si "gioca" sempre con una classe che, in un metodo o in un altro, si occupa di creare i pulsanti di cui ha bisogno.
    La programmazione ad oggetti influenza maggiormente l'area concettuale del codice: per esemplificare, la scelta di utilizzare una classe complessa dipende da quanti discendenti, cioè varianti, pensi di farne. Nel tuo caso, se il menu è sempre identico e viene creato quando richiesto, aggiungere i pulsanti nel costruttore o richiamando un metodo appropriato è la stessa identica cosa.
    E' diverso invece il caso in cui vuoi creare "varianti" del tuo menu, ad esempio accodando nuove voci a quelle esistenti: in quella situazione, ti conviene rendere "virtuale" o comunque "overridable" il metodo makeMenu in modo da poterlo richiamare da una classe discendente ed estendere aggiungendo le voci necessarie.

    2) Qual'è il migliore? Io penso il secondo modo perchè non si istanzia nessun oggetto e quindi occupo meno risorse. O sbaglio?
    I metodi che hai presentato sono identici: l'unica differenza è nella posizione del codice che in un caso si trova nel costruttore, nell'altro caso si trova in un metodo a parte, ma in entrambi i casi deve essere caricato in memoria quando crei un'istanza della classe (oggetto).

    3) Usare metodi statici è una cosa da fare nella programmazione oppure è sconsigliato per qualche motivo?
    In che senso? Ciascuna tipologia di metodo è creata per essere utilizzata...
    Il fatto che possa essere "sconsigliata", dipende dall'uso che se ne fa.

    4) I metodi statici occupano più risorse dei metodi non statici?
    No, ma io mi limiterei a valutare la loro effettiva utilità in base alle esigenze di progettazione ad oggetti.

    5) I metodi statici sono più lenti dei metodi non statici?
    No, sono più rapidi perchè il loro indirizzo in memoria è già noto, mentre i metodi che possono essere posti in "override" devono essere ricercati dal codice in base all'oggetto con cui si ha a che fare.


    Non hai specificato il linguaggio che utilizzi, ad ogni modo io mi riferisco a Delphi. I principi della programmazione ad oggetti non cambiano, al massimo si modificano leggermente le nomenclature degli elementi.

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

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    Uso java

    Non sono d'accordo con questa frase

    I metodi che hai presentato sono identici: l'unica differenza è nella posizione del codice che in un caso si trova nel costruttore, nell'altro caso si trova in un metodo a parte, ma in entrambi i casi deve essere caricato in memoria quando crei un'istanza della classe (oggetto).

    Perchè se uso il secondo modo (quindi definisco un metodo statico) non devo creare in memoria nessuna istanza della classe. Questo non è un punto a favore per il secondo modo?

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da abcd1000
    Perchè se uso il secondo modo (quindi definisco un metodo statico) non devo creare in memoria nessuna istanza della classe. Questo non è un punto a favore per il secondo modo?
    In tal caso, l'occupazione di memoria del metodo è sempre la stessa (per poterlo richiamare, deve comunque essere presente in memoria il codice), però risparmieresti lo spazio occupato dall'istanza della classe in se, su questo hai ragione.

    Però, mi sembra un po' astruso usare un metodo statico per inizializzare un menu rappresentato da una classe...mi sembra si stia facendo la punta agli aghi (mi sto riferendo all'autore originale della discussione): per me è più semplice definire una classe che rappresenta il menu, crearla quando c'è bisogno effettivamente del menu e distruggerla quando l'uso è terminato.
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.