Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 50

Discussione: Funzioni o Classi

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99

    Funzioni o Classi

    Ciao a tutti,
    Ho acquistato da alcune settimane alcuni libri per quanto riguarda la programmazione php,js e ajax. Il mio modo di programmare visto e considerato che ho imparato grazie a siti e forum come html.it (quindi del tutto autodidatta) è del tutto classico.
    Ultimamente ho iniziato a programmare gestendo tutto con le function e richiamandole quando è necessario e devo ammettere che mi trovo molto bene.
    La domanda che mi pongo leggendo in questi giorni il capitolo "Php 5 orientato ad oggetti" e quindi vedendo l'utilizzo delle classi (da me mai utilizzate) è:
    -Qual'è il vantaggio tra la programmazione OOP rispetto al mio attuale modo di programmare utilizzando semplicemente delle "librerie personali" di funzioni?

    Mi fate un esempio semplice del vantaggio della prima (OOP) rispetto alla classica o ad un codice solo con funzioni?

    Può sembrare una domanda al quanto semplice per chi magari ha già la visione della programmazione ad oggetti, ma per me che sono alle prime armi e che comunque mi reputo un principiante è molto importante capirne l'utilizzo!
    Vi ringrazio anticipatamente

  2. #2
    Te lo spiego in due parole anche perchè altrimenti ci vorrebbero sermoni di ore e pagine e pagine di discussioni:

    i vantaggi dell'oop sono vari: riusabilità, manutenibilità, scalabilità, omogeneità di programmazione (grazie soprattutto ai patterns), alta coesione, basso accoppiamento, poca duplicazione del codice, responsabilità definite e bla bla...

    il tuo modo di procedere non so che vantaggi ti porti, ma probabilmente qualcosa di quanto detto sopra sicuramente

    La differenza? Escludendo il piano professionale/enterprise (dove oop è scontato e non esistono alternative), sul piano amatoriale/semi-professionale l'oop non porta granchè di vantaggi, anzi, spesso su progetti piccolini (dal sitarello personale all'ecommerce del macellaio sotto casa) può portare a scrivere circa il doppio di quanto faresti con uno script classico, costringendoti anche ad affrontare problemi logici non banali.

    Sta a te decidere. Fortuna tua, php non è che sia molto OO, è molto blando nella tipizzazione quindi permette di fare giochetti che in un linguaggio più fortemente tipizzato non potresti fare (e per questo rispetto ad altri linguaggi non permette di compiere certe cose che in OO sono basilari); comunque, puoi divertirti parecchio.

    Io consiglio sempre l'OO, soprattutto se si vuole provare a "crescere" un pò come programmatori: non a tutti interessa, non tutti hanno le capacità per capirla, non sempre serve quando hai un linguaggio poco tipizzato come php. Per un progettino medio piccolo può anche bastare un framework terzo/template engine che un poco ti permette di dividere la logica di un'app, senza fare molta programmazione ad oggetti in più.


    Un esempio di cosa si fa con l'OOP (anche se l'esempio è in java): http://latemar.science.unitn.it/marc...ernsInJava.pdf
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Fondamentalmente l'approccio OO ti costringe ad organizzare bene il tuo codice, mentre con il metodo "a funzioni" sta a te creare una gerarchia nelle librerie, organizzare namespace, evitare conflitti, definire interfacce etc.

    Per il resto, guerre di religione a parte (e su questo argomento ce ne sono piu' infinito), va a gusto personale.

  4. #4
    Una definizione che può rendere l'iea del perchè scegliere la programmazione OO rispetto alla procedurale è che con gli oggetti tu modellizzi il mondo reale, mentre con le procedure no
    Es.
    Classe "Cliente". La classe Cliente è un modello che rappresenta il cliente. Questa classe, quando viene "inizializzata", ha una serie di caratteristiche che, tipicamente, sono proprietà (variabili e costanti), metodi o comportamenti (funzioni) e messaggi.
    Esempio.
    Cliente ha le seguenti proprietà: ID, Nome, Cognome, Codice fiscale, Partita IVA, Città di residenza, Indirizzo di residenza, Telefono.
    Cliente ha i seguenti metodi: ricerca_da_idUnivoco, ricerca_da_codiceFiscale.
    Cliente ha i seguenti messaggi: recupera_fatture, recupera_pagamenti

    Cosa significa tutto questo? Significa che se nel tuo programma hai bisogno di gestire un Cliente, userai la tua Classe Cliente, inizializzandola e chiamando (mandando) i metodi (messaggi) appropriati.
    (PRECISAZIONE: metodi e messaggi hanno delle piccole sfumature concettuali, nella programmazione OO pura, ma in php possiamo definirli equivalenti)
    $cliente = new Cliente();
    A questo punto hai un oggetto Cliente (una istanza della classe Cliente) inizializzato (per semplicità lo inizializziamo "vuoto": ID = "", Nome = "", Cognome = "", Codice fiscale = "", Partita IVA = "", Città di residenza = "", Indirizzo di residenza = "", Telefono = "").
    Ora dobbiamo recuperare le informazioni.
    $cliente->ricerca_da_idUnivoco(87);
    Ora la nostra istanza di Cliente ha recuperato le info per il clietne 87 e ha valorizzato le sue proprie proprietà (ID = 87, Nome = "mario", Cognome = "rossi", Codice fiscale = "mrrss14e96l421d", Partita IVA = "123456789012", Città di residenza = "roma", Indirizzo di residenza = "piazza regio 7", Telefono = "06987654").
    Ora vogliamo ricercare le sue fatture
    $cliente->recupera_fatture();
    Il messaggio recupera_fatture istanzia una classe Fatture e chiama un metodo (di Fatture!) che esegue tutte le funzioni necessarie.

    Il vantaggio di questo approccio è che tutti i metodi di Cliente sono definiti nella classe Cliente, così come le sue proprietà eccetera. Tutti i metoi, messaggi ecc di Fatture sono definiti nella classe Fatture e così via, evitandoti quindi di doverti ricordare come diamine hai chiamato quella funzione per l'anagrafica e come quella per le fatture: semplicemente si chiameranno tutti ricerca_da_idUnivoco
    Inoltre, se c'è un problema con le funzioni del Cliente (es: non recupera correttamente l'indirizzo), dovrai preoccuparti solo di quel metodo di quella classe, tralasciando tutto il resto del programma e soprattutto modificando SOLO in un punto (il metodo incriminato) e senza doverti riguardare tutto il programma.
    Altro vantaggio è che puoi "specializzare" le classi.
    Se nel programma esiste già una classe "MezzoDiTrasporto" che ha come proprietà i dati di posizione, velocità, destinazione e carico utile, e occorre una nuova classe "Aereo", è possibile crearla direttamente dall'oggetto "MezzoDiTrasporto" dichiarando una classe di tipo "Aereo" che eredita da "MezzoDiTrasporto" e aggiungendovi anche il dato "Quota di crociera", con il vantaggio che la nuova classe sarà sia un "Aereo" che un "MezzoDiTrasporto", permettendo di gestire in modo omogeneo tutti i mezzi con una semplice lista di "MezziDiTrasporto".

    Questo ovviamente semplificando un (bel) po' le cose.
    Per approfondimenti: http://it.wikipedia.org/wiki/Program...a_agli_oggetti

  5. #5
    Cerchiamo pero' di non cadere nel solito discorso per cui si fa il paragone tra OOP fatta bene e procedurale fatta male.

    Ad esempio, questa
    Inoltre, se c'è un problema con le funzioni del Cliente (es: non recupera correttamente l'indirizzo), dovrai preoccuparti solo di quel metodo di quella classe, tralasciando tutto il resto del programma e soprattutto modificando SOLO in un punto (il metodo incriminato) e senza doverti riguardare tutto il programma.
    e' una caratteristica del codice strutturato bene, non e' un'esclusiva della programmazione OO.

  6. #6
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    e se esagerassimo dicendo che una classe è fatta di codice procedurale?

    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  7. #7
    Originariamente inviato da k.b
    Cerchiamo pero' di non cadere nel solito discorso per cui si fa il paragone tra OOP fatta bene e procedurale fatta male.

    Ad esempio, questa

    e' una caratteristica del codice strutturato bene, non e' un'esclusiva della programmazione OO.
    Mica tanto...con le procedure rischi di dover riguardare e cercare tutti i punti in cui viene utilizzato quel metodo per vedere se il risultato, una volta corretto, viene elaborato bene dalle altre procedure. Con le classi no (quasi mai, per meglio dire). Corretto il metodo di ricerca ci si deve preocupare solo dell'eventuale metodo di istanza (o di classe, o astratto) che ne usa il risultato.

    $pippo = Procedura cerca_cliente;
    $output_fattura = procedura crea_output_fattura($pippo);
    $output_cliente = procedura crea_output_cliente($pippo);
    $output_spedizione = procedura crea_output_spedizione($pippo);

    In procedurale devi controllarti tutti i vari metodi di output sia per la coerenza dell'input che del metodo in sè. Con le classi no o non del tutto (in realtà dipende da come viene fatta la classe di output o la classe cliente, ma vabbeh non entriamo nel dettaglio).
    Diciamo che su progetti complessi la probabilità di dover mettere mano in molte classi/metodi per correggere un bug è bassa, mentre con le procedure è alta. Su progetti piccoli con 5-20 classi è invece quasi identica.
    Se proprio vogliamo dire, usare le classi semplifica le fasi di mantenimento ed espansione del progetto ma complica le fasi di progettazione.

  8. #8
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    non è vero dacos
    confondi codice procedurale con codice scritto coi piedi.

    un esempio intuitivo è quello di mettere in un file una funzione che formatta il prezzo
    la puoi fare sia in procedurale che mediante una classe statica.

    se sbagli devi correggere sia la funzione che il metodo, che poi sempre na funzione è, della classe
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99
    Allora ringrazio tutti per le risposte che mi avete dato.
    Santino per esser stato molto chiaro, k.b per essere stato semplice e chiaro e anche Dascos che mi ha fatto capire CON ESEMPI l'utilizzo di una classe e i vantaggi.
    Però rileggendo le righe di Dascos e i suoi esempi, non riesco proprio a capire dove applicare una classe ad un mio qualsiasi sito (php, sql, js). Io da sempre ho programmato a procedure, ho fatto una community (blog, album, foto, forum etc) e credetemi le pagine diventavano di quasi 1000 righe all'una xD.
    Ultimamente ho creato un programma di gestione spedizioni presso l'azienda cui lavoro e l'ho fatto interamente con le funzioni e come dice Dascos è molto vantaggioso, sia per il fatto che si risparmia codice, ma soprattutto sul fatto che una stessa funzione possa esser richiamata qnt volte si vuole e allo stesso tempo se c'è qlk bug, lo si corregge 1 sola volta all'interno della function. Il problema e che la classe o l'istanziare un oggetto contenente una classe A COSA MI SERVE?
    Siccome le operazioni sul web sono quasi sempre le stesse, calcoli pochissimi mentre query con la pala, in che situazione potrei usare una classe?
    Cioè la domanda che mi pongo è:
    Se la classe serve a definire uno o più oggetti nel prp programma in fase di eleborazione, e tale oggetto non fa null'altro se richiesto di eseguire delle FUNCTION(), a che serve creare una classe? Non basta semplicemente richiamare tali funzioni?
    Il vantaggio di creare una classe, istanziarne un oggetto per poi richiamare una fuzione, rispetto magari al semplice richiamo di una funzione (senza l'utilizzo della classe) qual'è?

    Scusate, ma proprio nn lo capisco (per ora)
    però per parlarne tutti un gran bene vorrei capire in modo tale
    da modificare il mio modo di vedere e di programmare!

  10. #10
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    cadan se proprio devi iniziare a lavorare il consiglio è quello di usare le classi. usare le classi permette di semplificarsi la vita su tante cose soprattutto su progetti grandi

    senza contare che anche php si sta orientando verso la oop. ti basta considerare la libreria mysqli e date

    quindi oop
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


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.