OOP - i metodi contenuti negli oggetti?

1

Sono alle prese con la programmazione orientata agli oggetti.
Da una vista concettuale, i metodi di istanza sono contenuti negli oggetti (come le variabili di istanza sono)?

Sto immaginando oggetti come questo:

    
posta Othman 11.02.2017 - 08:38
fonte

3 risposte

4

Concettualmente, i metodi fanno parte di un oggetto tanto quanto le variabili di istanza. In questo modo, la tua vista sugli oggetti è corretta.

Tuttavia, dovresti capire che se hai più oggetti dello stesso tipo, fisicamente ci saranno più copie delle variabili di istanza in memoria, ma solo una singola copia dei metodi. Puoi visualizzarlo come un'ottimizzazione della vista concettuale in cui gli scrittori del compilatore hanno trovato il modo di consentire a una singola copia di un metodo di istanza di funzionare con più istanze diverse.

    
risposta data 11.02.2017 - 09:15
fonte
0

È importante cogliere le differenze inerenti a oggetti, istanze e amp; eredità.

  • Un oggetto o la classe definisce una raccolta di cosa memorizzare e come elaborarla completa con metodi di interfaccia, alcuni di questi possono essere privati altri pubblici.
  • Un'istanza di un oggetto inizializza e memorizza i dati e fa riferimento ai metodi.
  • L'ereditarietà ti permette di specializzare oggetti aggiungendo, o addirittura sostituendo, uno qualsiasi dei precedenti creando un nuovo tipo di oggetto o classe al momento della definizione dell'oggetto.
  • Modelli ti consentono di definire oggetti / classi in cui alcuni. o tutti, dei tipi di dati e amp; i metodi vengono creati solo al momento della prima istanza di quell'oggetto o classe con un determinato set di tipi per gli elementi basati su modelli, quindi se hai una classe con un parametro di funzione e amp; variabile di archiviazione che è un tipo di modello in realtà creerai una copia di quella classe per ogni tipo concreto di quell'elemento specifico che instanziate. Nota che alcune lingue, come python, usano "Duck Typing" dove, a condizione che tutte le operazioni siano valide, non è necessaria una nuova copia dei metodi a causa delle modifiche dei tipi ai membri all'interno delle istanze.
  • Alcune lingue, come python, consentono "Patch di scimmia" sia per le classi che per le istanze. Se un'istanza di un oggetto contiene solo membri di dati e / o metodi aggiunti a tale istanza, se usi Patch della scimmia la classe di base , in python almeno , le sue istanze esistenti otterranno il nuovo membro / metodo.
risposta data 11.02.2017 - 09:49
fonte
0

Questo dipende molto dalla lingua.

  • In C♯, Visual Basic.NET, Eiffel (qui i metodi sono chiamati "routine", ma sono la stessa cosa), C ++ ("funzioni membro"), Smalltalk, Objective-C, Python, Newspeak, D, ... i metodi sono contenuti nelle classi.
  • In Java, i metodi sono contenuti in classi o interfacce (sotto forma di "metodi predefiniti").
  • In Ruby, i metodi sono contenuti nei moduli ( Class è una sottoclasse di Module ). I moduli sono usati per l'ereditarietà del mixin.
  • In Scala, i metodi sono contenuti in classi, tratti o oggetti singleton. I tratti sono usati per l'ereditarietà del mixin.
  • In Self, NewtonScript, Act-1, Io, Ioke, Seph, ECMAScript, ..., i metodi sono contenuti negli oggetti.
risposta data 11.02.2017 - 11:45
fonte

Leggi altre domande sui tag