L'ereditarietà è un modo per riutilizzare il codice di oggetti esistenti o per stabilire un sottotipo da un oggetto esistente o entrambi, a seconda del supporto del linguaggio di programmazione.
Quando dovresti preferire i modelli ereditari rispetto ai mixin in linguaggi dinamici? Per mixin, intendo il vero e proprio mixaggio, come nell'inserimento di funzioni e membri di dati in un oggetto in fase di esecuzione. Quando useresti, ad esempio, l'eredità prototipale anziché i mixin? Per illustrare più chiaramente cosa intendo …
In Meyer Object-Oriented Software Construction (1988) definisce il principio aperto / chiuso come segue: Si dirà che un modulo sarà aperto se è ancora disponibile per l'estensione. Ad esempio, dovrebbe essere possibile aggiungere campi alle strutture dati che contiene o nuovi elementi all'insieme di funzioni che esegue. Si dirà che …
Un certo fallimento di OOP viene mostrato con una classe Square che eredita da Rectangle, dove Logicamente Square è una specializzazione di Rectangle e dovrebbe quindi ereditare da esso, ma tutto cade a pezzi quando si tenta di modificare la lunghezza o la larghezza di un quadrato. Esiste un termine …
Nella nostra applicazione Rails, stiamo aggiungendo notifiche. Alcuni di questi sono blocking: arrestano l'avanzamento di qualunque risorsa vengano aggiunti, poiché mancano alcune informazioni su quella risorsa. Altre notifiche sono semplici notifiche e forniscono solo informazioni. Oggi ho avuto una discussione con un altro programmatore nel nostro team. Ho creato la …
Al momento ho due classi derivate Ae B, che hanno entrambe un campo in comune e sto cercando di determinare se dovrebbe andare nella classe base. Non viene mai referenziato dalla classe base, e dire se in qualche punto lungo la strada viene derivata un'altra classe C, che non ha …
In Java, ci sono quattro modificatori di accesso disponibili per i metodi: public - qualsiasi classe può utilizzare questo metodo. protected - le classi nello stesso pacchetto e le sottoclassi di qualsiasi pacchetto possono utilizzare questo metodo. private - solo questa classe può utilizzare questo metodo. no modifier ("pacchetto privato") …
Allo stato attuale, questa domanda non è adatta al nostro formato di domande e risposte. Ci aspettiamo che le risposte siano supportate da fatti, riferimenti o competenze, ma questa domanda probabilmente solleciterà dibattiti, argomenti, sondaggi o discussioni estese. Se ritieni che questa domanda possa essere migliorata e possibilmente riaperta, visita …
Ispirato da questa risposta: Liskov principio di sostituzione richiede che Le condizioni preliminari non possono essere rafforzate in un sottotipo. Le postcondizioni non possono essere indebolite in un sottotipo. Gli invarianti del supertipo devono essere conservati in un sottotipo. Vincolo storico (la "regola della storia"). Gli oggetti sono considerati modificabili …
Oggi ho notato che praticamente non uso mai protectedmetodi nel codice C ++, perché raramente sento la necessità di chiamare metodi non pubblici di un genitore. Uso il metodo protetto in Java nel modello di modello, ma poiché è possibile ignorare i metodi privati in C ++, non ho nemmeno …
Questa pagina sostiene la composizione sull'eredità con il seguente argomento (riformulato nelle mie parole): Una modifica della firma di un metodo della superclasse (che non è stata ignorata nella sottoclasse) provoca ulteriori modifiche in molti punti quando utilizziamo Eredità. Tuttavia, quando usiamo Composizione, la modifica aggiuntiva richiesta è solo in …
Ho una classe, che avvolge un'altra classe di un tipo base comune. Poiché l'interfaccia del tipo di base è piuttosto ampia, ciò implica la scrittura di molte funzioni pass-through. Sto cercando un modo per evitarlo. Facciamo un esempio: Car / \ Volvo VolvoWithTrailer Ora devo implementare tutte le funzioni nell'interfaccia …
Sto cercando di insegnare a me stesso l'ingegneria del software e trovo alcune informazioni contrastanti che mi confondono. Ho imparato OOP e quali sono le classi / interfacce astratte e come usarle, ma poi sto leggendo che si dovrebbe "favorire la composizione sull'eredità". Capisco la composizione quando una classe compone …
Il codice seguente provoca una perdita di memoria: #include <iostream> #include <memory> #include <vector> using namespace std; class base { void virtual initialize_vector() = 0; }; class derived : public base { private: vector<int> vec; public: derived() { initialize_vector(); } void initialize_vector() { for (int i = 0; i < …
Per le classi con campi opzionali, è meglio usare l'ereditarietà o una proprietà nullable? Considera questo esempio: class Book { private String name; } class BookWithColor extends Book { private String color; } o class Book { private String name; private String color; //when this is null then it is …
Le interfacce vuote sono generalmente considerate cattive pratiche, per quanto ne so, specialmente dove cose come gli attributi sono supportate dal linguaggio. Tuttavia, un'interfaccia è considerata "vuota" se eredita da altre interfacce? interface I1 { ... } interface I2 { ... } //unrelated to I1 interface I3 : I1, I2 …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.