Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Domanda su regole di buona programmazione

    Buongiorno e buona pasqua,

    prendendo in considerazione un programma (java) che prende due matrici e stampa a video il prodotto di queste due.
    L'idea era quella di creare una classe che mi permettesse di fare la seguente operazione:

    public static void main(String args[]){
    Matrice A = new Matrice();
    Matrice B = new Matrice();
    Matrice C = new Matrice();

    C.Moltiplica(A,B);
    }

    dove C, A, B, sono oggetti della classe Matrice fatta nel seguente modo:

    public class Matrice{
    private int[][] M;
    private int row;
    private int column;

    ...
    costuttore..
    ....
    public void Moltiplica(Matrice A,Matrice B){
    for (int i=0;i<A.GetMatrixRow();i++) {
    for (int j=0;j<B.GetMatrixColumn();j++) {
    for (int k=0;k<A.GetMatrixColumn();k++) {
    M[i][j]+=(A.GetMatrixElement(i,k))*(B.GetMatrixElement(k, j));
    }
    }
    }
    }
    ....
    }

    dove GetMatrixRow() GetMatrixColumn() fanno quello che uno si aspetta, cioè restituiscono il numero di righe o di colonne dalla matrice dentro l'oggetto che chiama il metodo.
    Mentre GetMatrixElement(i,j) restituisce l'elemento nella posizione [i,j] della matrice all'interno della classe.

    La mia domanda è la seguente:
    Secondo la giusta programmazione è corretto riferirsi a oggetti e quindi metodi diversi dalla classe diversa da quella in cui mi trovo in quel momento? È corretto come ho implementato il metodo Moltiplica() ?

    L'idea, come ho detto prima, era quella di semplificare la main C.Moltiplica(A,B);
    LE DONNE:
    COME E' POSSIBILE SPERARE DI CAPIRLE SE LORO STESSE NON RIESCONO A FARLO?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Domanda su regole di buona programmazione

    Originariamente inviato da jaso
    Buongiorno e buona pasqua
    Altrettanto.

    Originariamente inviato da jaso
    Secondo la giusta programmazione è corretto riferirsi a oggetti e quindi metodi diversi dalla classe diversa da quella in cui mi trovo in quel momento? È corretto come ho implementato il metodo Moltiplica() ?

    L'idea, come ho detto prima, era quella di semplificare la main C.Moltiplica(A,B);
    Quello che è, secondo me, discutibile è il fatto che il metodo per la moltiplicazione viene invocato sull'oggetto che poi fa da destinazione del risultato.

    Non hai mostrato il costruttore della classe e nell'esempio hai istanziato semplicemente new Matrice(), cioè senza argomenti.

    In realtà il costruttore dovrebbe ricevere numero di righe/colonne per istanziare l'array interno .... altrimenti a cosa servirebbe??.

    Quindi se facessi es.:

    codice:
    Matrice A = new Matrice(2, 3);
    ....riempi A....
    Matrice B = new Matrice(4, 2);
    ....riempi B....
    Matrice C = new Matrice(2, 1);
    
    C.Moltiplica(A,B);
    Che cosa dovrebbe succedere?? Per il risultato della moltiplicazione mica è detto che la matrice C istanziata inizialmente di 2x1 sia sufficiente e vada bene (nel caso sopra no, infatti). Il metodo di moltiplicazione dovrebbe cambiare tutta la struttura dati di C creando una nuova matrice che sia appropriata, visto che solo l'algoritmo di moltiplicazione "sa" come determinare la giusta dimensione del risultato.

    Ma allora a cosa sarebbe servito istanziare comunque una matrice C di una qualche dimensione arbitraria?? A niente.

    Il metodo di moltiplicazione potrebbe (e dovrebbe) invece operare con il 'this' (una Matrice su cui è invocato) e su un'altra Matrice ricevuta come argomento. E il risultato restituirlo come una nuova Matrice.

    codice:
    Matrice matA = new Matrice(2, 3);
    Matrice matB = new Matrice(4, 2);
    ...
    
    Matrice matC = matA.moltiplica(matB);
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.