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

    Classi ereditate - Velocità e uso ottimizzato

    Sto costruendo un portale facendo uso della programmazione a oggetti.
    La struttura che sto creando è sperimentale e prima di andare avanti volevo chiedere qualche consiglio a chi ha qualche esperienza "avanzata" nell'uso della OOP (io la uso da qualche tempo, ma non posso dire di essere esperto nell'ottimizzarla).

    Ho una decina di classi "base" che vorrei avere sempre a disposizione. Anziché istanziare un oggetto per ognuna, avevo pensato di creare una eredità a cascata e istanziare un solo oggetto finale che contenga tutti i metodi.
    Anche perché le classi figlie possono recuperare di tanto in tanto i metodi di una o più classi padre.

    Vi faccio un esempio (la prima è la classe base, a seguire le classi figlie):
    => gestore di errori
    => connessione database
    => funzioni generiche
    => ecc.

    Il mio dubbio: con questa eredità "massiccia" rischio di rallentare troppo il sito?
    Ho fatto qualche esperimento (monitorando l'esecuzione) e mi pare che non ci siano rallentamenti significativi, però devo ancora finire tutto quanto e ho paura che mi accorgerò di dover cambiare tutto quando sarò già in fase avanzata...

    Avete già usato eredità con così tanti metodi? Oppure ogni volta istanziate un oggetto per classe e cercate di adattarvi?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    Ciao, non vedo l'utilità di ereditare tutte le classe, o meglio se non c'è una certa relazione tra le classi che effettivamente necessità di una eredità. Mentre una soluzione utile e crearti una classe di autoloader (possibilmente con un sistema di cache) dove gli indichi la cartella di residenza delle classi in modo tale da includerti tutte le librarie che ti sei creato.
    Inoltre ti consiglio di prendere in considerazione qualche Framework.

    Ti posto qualche link:
    Codeigniter facile da utilizzare, molto utilizzato e tante librerie di terze parti;

    Laravel bello ed elegante, ultimamente sta prendendo un sacco piede, molti sviluppatori di Codeginiter sono passati a laravel;

    Fuel php framework personalmente lo ritengo un buon framework tante classi a disposizione, anche in questo caso molti sviluppatori di Codeginiter sono passati a sono passati a fuel;

    Zend Framework II a detta di molti esperti è il RE dei framework (ovviamnete nel linguaggio php).
    Ultima modifica di felixaf21; 07-04-2014 a 08:16

  3. #3
    Ciao,
    mi hai fatto scoprire l'autoloader che avevo già sentito ma non ancora studiato...
    Per i framework, ogni tanto utilizzo Codeigniter (che mi sembra piuttosto buono). Però in parallelo stavo cercando di creare una mia struttura personalizzata, anche per studio personale.

    Il mio problema è che alcune classi richiamano metodi di due o più classi. Mettiamo, per esempio, che abbia queste due classi (invento i nomi per renderli più comprensibili):
    => classe "database", con metodo "esegui_query"
    => classe "functions", con metodo "pulisci_link"

    Una terza classe "articolo" deve richiamare sia "esegui_query" che "pulisci_link". Se non uso un sistema di eredità a cascata come stavo facendo, l'unico altro modo che mi viene in mente è di rendere globali gli oggetti delle altre due classi e poi importarle. Mi sembra però un sistema scomodo (soprattutto se richiamo metodi da 3 o 4 classi).

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    Instanzi la classe database e pulisci_link nella classe articolo.

    class articolo{
    public $db;
    public $pulisci;

    Public function __construct()
    {
    $this->db= new database();
    $this->pulisci = new pulisci()
    }

    }

    ovviamente devi averi le classe incluse (classe autoloader)

    scusa se trovi errori.. Sto scrivendo dal telefonino
    Ultima modifica di felixaf21; 07-04-2014 a 10:01

  5. #5
    Devi aver ben chiare le relazioni e cosa implicano.. Non puoi mettere tutto per ereditarietà quando effettivamente l'ereditarietà non c'è
    Questa volta, più che un voto.. è favoreggiamento.

  6. #6
    Ok, direi che ho capito cosa intendi, felixaf21
    Adesso provo a smembrare la struttura e a sistemarla, che il tuo sistema mi pare decisamente più pulito (e provo a eliminare l'ereditarietà dove non è necessario)

    Grazie a entrambi per l'aiuto

  7. #7
    se ti può aiutare:

    is-a -> ereditarietà = extends
    has-a -> aggregazione = __construct( class $istanza ) {
    use -> composizione = new $istanza
    Questa volta, più che un voto.. è favoreggiamento.

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.