Svolgere un esercizio per capire le interfacce.

di il
30 risposte

30 Risposte - Pagina 2

  • Re: Svolgere un esercizio per capire le interfacce.

    FabioJ ha scritto:


    Le spiegazioni di andbin sono per me ancora un tantino troppo complicate .
    Ok ... vediamo di (ri)partire bene. Nella "programmazione ad oggetti" l'elemento fondamentale è l'oggetto.
    Un oggetto è sostanzialmente l'insieme di 2 cose: uno "stato" e un "comportamento".

    Lo "stato" è l'insieme di informazioni contenute all'interno dell'oggetto. Questi sono semplicemente dei DATI: numeri, stringhe, altri oggetti ecc...
    In Java lo stato di un oggetto è rappresentato dalle "variabili di istanza".
    public class Persona {
        // 3 variabili di istanza
        private String nome;
        private String cognome;
        private int annoNascita;
    
        // ....
    }
    La classe definisce solo lo schema generale (la "forma") di tutti gli oggetti di quel tipo. Questo vuol dire che TUTTI gli oggetti che creerò di tipo Persona avranno quelle 3 variabili di istanza. Ma ciascun oggetto potrà avere informazioni distinte, perché ciascuno hai le SUE variabili DISTINTE da quelle di un altro oggetto Persona. Un oggetto Persona può contenere "Mario", "Rossi", 1970 e un altro oggetto Persona può contenere "Roberto", "Bianchi", 1956

    Il "comportamento" invece è rappresentato dai metodi. I metodi contengono codice Java, quindi possono fare operazioni, logiche, ecc...
    E i metodi associati all'oggetto possono usare lo "stato" proprio di quell'oggetto.
    Quindi un metodo in Persona del tipo:

    public String getNome()

    può tecnicamente accedere a tutte le 3 variabili di istanza ma presumibilmente andrà semplicemente a restituire il valore del campo nome.


    Ti è più chiaro ora?
  • Re: Svolgere un esercizio per capire le interfacce.

    Una volta stabilito ( almeno credo ) che il codice per creare l'interfaccia sia questo

    public interface Veicolo
    {
    String getMarca();
    String getModello();

    }

    Secondo passo:

    vorrei provare a modificare le due classi come richiesto nell'esercizio e cercare di capire come le classi si relazionano con l'interfaccia..
    per ora provo a modificarne la classe Automobile


    public public class Automobile implements Veicolo {
    private static int PERSONE_TRASPORTABILI =5;
    private int anno; // di immatricolazione
    public Automobile(int a) {
    this.anno = a;
    }
    public String getMarca();
    public String getModello();
    }
    {

    }



    ( Immaginatevi anche un funambolo che deve passare tra un palazzo e un'altro ...bene oltre a sentirmi un bambino di 5 anni che non sa portare la bicicletta anche un funambolo che potrebbe precipitare giu' da un palazzo).
    Scusate questa parentesi pero' la preoccupazione di non riuscire a risolvere questo esercizio sale...
  • Re: Svolgere un esercizio per capire le interfacce.

    MI e' chiaro andbin e spiegato bene .

    Scusa ma non avevo letto il tuo post .
  • Re: Svolgere un esercizio per capire le interfacce.

    Un dubbio mi viene ed e' un dubbio su la sintassi

    public String getNome() ... l'attributo nome che ho in-stanziato , l'ho scritto con la lettera minuscola "n" nell'istruzione invece e' riportato con la lettera "N" maiuscola . Mi confermi che comunque riguarda lo stesso attributo ?
  • Re: Svolgere un esercizio per capire le interfacce.

    FabioJ ha scritto:


    cercare di capire come le classi si relazionano con l'interfaccia..
    La classe si "relaziona" con l'interfaccia semplicemente mettendo implements Veicolo
    Ovvero dichiari che questa classe implementa la interfaccia (e quindi ne rispetta il "contratto" nel senso che dovrà avere i metodi dettati dalla interfaccia).

    FabioJ ha scritto:


    public public class Automobile implements Veicolo {
    private static int PERSONE_TRASPORTABILI =5;
    private int anno; // di immatricolazione
    public Automobile(int a) {
    this.anno = a;
    }
    public String getMarca();
    public String getModello();
    }
    {

    }
    No, qui dovrai IMPLEMENTARE i getMarca/getModello. Questo vuol dire che devono avere un corpo { ..... } non basta mettere ";" dopo getMarca().
    Ma cosa faranno questi metodi? Allora: sono dei "getter", quindi si presume che dovranno fornire all'esterno delle informazioni.
    Quali? Questo è il punto fondamentale: marca e modello dovranno essere delle variabili di istanza, così che ciascun oggetto Automobile possa avere la SUA marca e modello, distinte da quelle di altri oggetti Automobile.
    E a quel punto, getMarca/getModello semplicemente restituiranno quelle variabili di istanza.

    FabioJ ha scritto:


    public String getNome() ... l'attributo nome che ho in-stanziato , l'ho scritto con la lettera minuscola "n" nell'istruzione invece e' riportato con la lettera "N" maiuscola . Mi confermi che comunque riguarda lo stesso attributo ?
    Secondo le "convenzioni" note nella comunità di programmatori Java, i nomi di variabili e i nomi di metodi dovrebbero seguire la forma detta lowerCamelCase.
    Ovvero una variabile annoNascita (NON AnnoNascita o Annonascita o annonascita)
    E un metodo getNome (NON GetNome o Getnome o getnome)

    Mentre per i nomi di classi si dovrebbe usare la forma detta UpperCamelCase:
    Ovvero una classe es. MotoDaCorsa (NON motoDaCorsa o Motodacorsa o motodacorsa)
  • Re: Svolgere un esercizio per capire le interfacce.

    Bene .
    Cercando di non perdere il filo del ragionamento il nodo da sciogliere a questo punto e' cosa scrivere nel corpo {......} dei due costruttori String getMarca() {....}; e String getModello(){.....};
    Sicuramente un riferimento a delle stringhe di caratteri .
    Il return se non sbaglio si utilizza per le variabili ...
  • Re: Svolgere un esercizio per capire le interfacce.

    FabioJ ha scritto:


    cosa scrivere nel corpo {......} dei due costruttori String getMarca() {....}; e String getModello(){.....};
    Sicuramente un riferimento a delle stringhe di caratteri .
    Sì, marca e modello saranno delle variabili di istanza (vedi l'esempio Persona prima).

    Resta poi solo una questione: chi assegna a queste variabili. Ci sono due strade: il costruttore e/o un metodo setter.
  • Re: Svolgere un esercizio per capire le interfacce.

    A parte qualche errore di sintassi , potrebbe andar bene cosi' ????




    public public class Automobile implements Veicolo {
    private static int PERSONE_TRASPORTABILI =5;
    private int anno; // di immatricolazione
    public Automobile(int a) {
    this.anno = a;
    }
    public String getMarca() {
    return Marca;
    }

    public void setMarca(String Marca) {
    this.Marca = Marca;
    }
    public String getModello()

    {
    public String getModello() {
    return Modello;
    }

    public void setModello(String Modello) {
    this.Modello = Modello;
    }
    }


    }
  • Re: Svolgere un esercizio per capire le interfacce.

    FabioJ ha scritto:


    A parte qualche errore di sintassi , potrebbe andar bene cosi' ????
    "quasi". Non hai messo i due campi (variabili) di istanza marca e modello (m minuscole)
  • Re: Svolgere un esercizio per capire le interfacce.

    E' vero .

    Se cosi' va bene per la classe Automobile presumo debba fare la stessa procedura anche per la classe Bicicletta .



    public public class Automobile implements Veicolo {
    private static int PERSONE_TRASPORTABILI =5;
    private int anno; // di immatricolazione
    public Automobile(int a) {
    this.anno = a;
    }
    public String getMarca() {
    return Marca;
    }

    public void setMarca(String Marca) {
    this.Marca = marca;
    }
    public String getModello()

    {
    public String getModello() {
    return Modello;
    }

    public void setModello(String Modello) {
    this.Modello = modello;
    }
    }


    }
  • Re: Svolgere un esercizio per capire le interfacce.

    No ho sbagliato ...e'

    this.marca = Marca;
    this.modello = Modello;
  • Re: Svolgere un esercizio per capire le interfacce.

    Andbin , quando dici :

    "quasi". Non hai messo i due campi (variabili) di istanza marca e modello (m minuscole)

    ti riferisci soltanto al fatto dell'errore di sintassi oppure devo aggiungere nel codice altre righe di codice del tipo metodo toString();


    public String toString() {
    return " Marca : " + getMarca() + " Modello : "+ getModello();
    }
  • Re: Svolgere un esercizio per capire le interfacce.

    FabioJ ha scritto:


    ti riferisci soltanto al fatto dell'errore di sintassi oppure devo aggiungere nel codice altre righe di codice del tipo metodo toString();
    No, il toString() non c'entra(va). Non avevi messo le variabili di istanza. Guarda l'esempio Persona che ho detto prima, essa ha 3 variabili di istanza. Devi metterne tu 2 una per marca, l'altra per modello.

    Poi sì, qualche erroruccio sulla scrittura/sintassi l'hai fatto. Non so se è un problema di copia-incolla qui o che altro ma avevi scritto:
    public void setMarca(String Marca) {
    this.Marca = marca;
    }
    public String getModello()
    
    {
    public String getModello() {
    return Modello;
    }
    Quindi così sembra che ci sia un getModello dentro il getModello. Ovviamente non ti compilerebbe un bel niente così.
  • Re: Svolgere un esercizio per capire le interfacce.

    Spero cosi' vada bene ....


    Public public class Automobile implements Veicolo {
    private static int PERSONE_TRASPORTABILI =5;
    private int anno; // di immatricolazione
    public Automobile(int a) {
    this.anno = a;
    }
    public String getMarca() {
    return Marca;
    }

    public void setMarca(String Marca) {
    private String Marca;
    this.Marca = marca;
    }

    public String getModello() {
    return Modello;
    }

    public void setModello(String Modello) {
    Private String Modello
    this.Modello = modello;
    }
    }


    }
  • Re: Svolgere un esercizio per capire le interfacce.

    FabioJ ha scritto:


    Spero cosi' vada bene ....
    No, le variabili di istanza vanno nella classe ma fuori da metodi. (come quel private int anno; )
Devi accedere o registrarti per scrivere nel forum
30 risposte