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.
Negli ultimi mesi, il mantra "favorire la composizione sull'eredità" sembra essere sorto dal nulla e diventare quasi una sorta di meme all'interno della comunità di programmazione. E ogni volta che lo vedo, sono un po 'sconcertato. È come se qualcuno avesse detto "favorire i trapani sui martelli". Nella mia esperienza, …
Mi è sempre piaciuta l'idea di avere l'ereditarietà multipla supportata in una lingua. Molto spesso però è stato intenzionalmente dimenticato, e la presunta "sostituzione" sono interfacce. Le interfacce semplicemente non coprono tutto lo stesso terreno dell'ereditarietà multipla, e questa restrizione può occasionalmente portare a più codice della caldaia. L'unica ragione …
Ho sempre letto che la composizione è da preferire all'eredità. Un post sul blog su tipi diversi , ad esempio, sostiene l'uso della composizione rispetto all'eredità, ma non riesco a vedere come si ottiene il polimorfismo. Ma ho la sensazione che quando le persone dicono preferiscono la composizione, intendono davvero …
Se un quadrato è un tipo di rettangolo, allora perché un quadrato non può ereditare da un rettangolo? O perché è un cattivo design? Ho sentito persone dire: Se hai creato Square derivato da Rectangle, un Square dovrebbe essere utilizzabile ovunque ti aspetti un rettangolo Qual è il problema qui? …
"Classe astratta" e "interfaccia" sono concetti simili, con l'interfaccia che è la più astratta delle due. Un fattore di differenziazione è che le classi astratte forniscono implementazioni di metodi per le classi derivate quando necessario. In C #, tuttavia, questo fattore di differenziazione è stato ridotto dalla recente introduzione di …
Sono ancora uno studente al liceo (che frequenta la terza media) e devo ancora frequentare un vero corso di informatica a scuola. Tutto ciò che ho fatto finora è attraverso i libri. Quei libri mi hanno insegnato concetti come l'ereditarietà, ma in che modo può essere utile suddividere un programma …
Sto solo finendo il mio master (in informatica) e facendo domanda per un lavoro. Ho notato che molte aziende chiedono specificamente una comprensione dell'orientamento agli oggetti. Le domande più frequenti sull'intervista riguardano ereditarietà, polimorfismo, accessori, ecc. OO è davvero così cruciale? Ho anche avuto un'intervista per un lavoro di programmazione …
Il C ++ ha una semplice eredità multipla, molti progetti linguistici lo vietano come pericoloso. Ma alcune lingue come Ruby e PHP usano strana sintassi per fare la stessa cosa e chiamarla mixin o tratti. Ho sentito molte volte che i mixin / tratti sono più difficili da abusare della …
sfondo Sto progettando una lingua, come un progetto collaterale. Ho un assemblatore funzionante, un analizzatore statico e una macchina virtuale per questo. Dato che posso già compilare ed eseguire programmi non banali usando l'infrastruttura che ho costruito, ho pensato di fare una presentazione alla mia università. Durante il mio discorso …
Sto cercando di capire i principi SOLID di OOP e sono giunto alla conclusione che LSP e OCP hanno alcune somiglianze (se non per dire altro). il principio aperto / chiuso afferma che "le entità software (classi, moduli, funzioni, ecc.) dovrebbero essere aperte per l'estensione, ma chiuse per modifica". LSP …
Ho trovato un albero ereditario nella nostra (piuttosto grande) base di codice che va in questo modo: public class NamedEntity { public int Id { get; set; } public string Name { get; set; } } public class OrderDateInfo : NamedEntity { } Da quello che ho potuto raccogliere, questo …
Stavo discutendo con un collega e alla fine abbiamo avuto intuizioni contrastanti sullo scopo della sottoclasse. La mia intuizione è che se una funzione primaria di una sottoclasse è esprimere un intervallo limitato di possibili valori del suo genitore, allora probabilmente non dovrebbe essere una sottoclasse. Ha sostenuto l'intuizione opposta: …
Considera il seguente disegno public class Person { public virtual string Name { get; } public Person (string name) { this.Name = name; } } public class Karl : Person { public override string Name { get { return "Karl"; } } } public class John : Person { public …
Ho usato per creare molte classi / metodi astratti. Quindi ho iniziato a utilizzare le interfacce. Ora non sono sicuro che le interfacce non rendano obsolete le classi astratte. Hai bisogno di una lezione completamente astratta? Crea invece un'interfaccia. Hai bisogno di una classe astratta con qualche implementazione? Crea un'interfaccia, …
Ad esempio, considera che ho una classe per altre classi da estendere: public class LoginPage { public String userId; public String session; public boolean checkSessionValid() { } } e alcune sottoclassi: public class HomePage extends LoginPage { } public class EditInfoPage extends LoginPage { } In effetti, la sottoclasse non …
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.