Sono confuso su astrazione e encapsulation.What mi sento è che classe è l'incapsulamento in quanto incapsula i dati e il comportamento, mentre l'interfaccia è un commento abstraction.PleaseL'interfaccia è il livello più alto di astrazione?
risposta
Penso che la tua terminologia sia confusa.
Encapsulation - inserisce dati e funzionalità in un'unica posizione. Possiamo ottenere questo attraverso le classi
Polymorphism - Consente di gestire i valori di diversi tipi di dati utilizzando un'interfaccia uniforme.
Il polimorfismo può essere ottenuto ereditando le classi di base (con funzioni virtuali) e/o implementando le interfacce.
Queste tecniche (e altre) ci danno abstraction, che si applica in realtà a tutti i processi che usiamo per risolvere un problema in componenti più piccoli.
EDIT
D) Lei chiede "posso dire, l'astrazione è la gerarchia più in alto che si realizza attraverso l'incapsulamento e il polimorfismo?"
A) Non posso rispondere a questa domanda, non so cosa intendi con "topmost" e "highest". Non c'è una gerarchia qui.
Functional DecompositionFunctional Decomposition è una forma di astrazione, che può essere ottenuta senza utilizzare l'Orientamento oggetto, dove dovrebbe venire nella gerarchia?
Il meglio che posso fare con una gerarchia è questa definizione (diritto fuori della mia testa, in modo YMMV)
- astrazione è la pratica di rompere un grande problema in componenti più piccoli, in modo che ogni più piccolo Il problema può essere risolto nell'isolamento (relativo) .
- Il polimorfismo è una tecnica che possiamo usare per ottenere l'astrazione. Lo prevede l'identificazione di diversi tipi di dati e comportamenti che possono essere trattati in modo omogeneo.
- Un'interfaccia dichiara solo i tipi di comportamento , incapsulando il comportamento in un tipo. Esso fornisce alcuna comportamento reale o dati
- Una classe astratta dichiara tipi di comportamento, ma può anche fornire comportamenti e dei dati, il tutto incapsulato in un tipo.
- Pertanto, l'interfaccia può essere visto a fornire un semplice o pura forma di polimorfismo di astratte classi.
Guardate alle voci di Wikipedia abstraction in Computer Science. In particolare, probabilmente sei interessato all'astrazione rispetto alla programmazione orientata agli oggetti. Ho citato parte della relativa sezione sottostante:
In teoria programmazione orientata agli oggetti, astrazione comporta la possibilità di definire oggetti che rappresentano astratti "attori" in grado di eseguire il lavoro, segnalare su e il cambiamento il loro stato, e "comunicare" con altri oggetti nel sistema . Il termine incapsulamento si riferisce al nascondiglio dei dettagli statali, ma estendendo il concetto di tipo di dati da precedenti linguaggi di programmazione per comportamento associato più fortemente con i dati, e standardizzare il modo in che i diversi tipi di dati interagiscono, è il inizio dell'astrazione. Quando l'astrazione procede nelle operazioni definite, abilitando gli oggetti di tipi diversi da sostituire, si chiama polimorfismo. Quando il valore procede nella direzione opposta, all'interno dei tipi o delle classi, strutturandoli per semplificare un insieme complesso di relazioni , si chiama delegazione o ereditarietà .
In generale, direi che le interfacce e le classi dovrebbero essere esempi di astrazioni, trattando i dati come una "cosa" concettuale piuttosto che dati grezzi. L'incapsulamento viene usato per far funzionare queste astrazioni con altre astrazioni di "cose" concettualmente diverse.
Lo scopo di incapsulamento è quello di nascondere i dettagli di implementazione:
Un esempio altamente artificiosa:
public class Person {
private int age;
public boolean canBuyBeer() {
return age >= 21;
}
}
si potrebbe in seguito cambiare questo a:
public class Person {
private int age;
private boolean isInUSA
public boolean canBuyBeer() {
if(isInUSA)
return age >= 21;
else
return age >= 18;
}
}
Le norme in materia di l'età e l'origine possono cambiare ma il chiamante non ha bisogno di sapere.
Le interfacce possono essere utilizzate per astrarre diversi tipi. Considerate questo:
public interface Beverage {
public boolean containsAlchohol;
}
public class Soda implements Beverage {
public boolean containsAlchohol {
return false;
}
}
public class Beer implements Beverage {
public boolean containsAlchohol {
return true;
}
}
Si potrebbe aggiornare persona come:
public class Person {
private int age;
private boolean isInUSA
public boolean canBuyBeverage(Beverage b) {
if(b.containsAlchohol()) {
if(isInUSA)
return age >= 21;
else
return age >= 18;
}
else {
return true;
}
}
}
Così persona è incapsulare la logica se quando una persona può acquistare un certo tipo di bevanda. L'interfaccia Beverage riassume la logica associata a una bevanda.
Si possono avere esempi migliori, ma questa è l'idea generale.
Penso che tu abbia capito bene. Un'interfaccia dice, in generale: questo è ciò che questo genere di cose è. Una classe dice: ecco come funziona questa cosa; Nasconderò i dettagli dentro di me. Una classe è un'implementazione (solitamente) concreta dell'astrazione dell'interfaccia.
- 1. OCaml: più alto il polimorfismo kinded (astrazione su moduli?)
- 2. Qual è il livello più basso assoluto di astrazione "disegno" in GNU/Linux?
- 3. C# è un linguaggio di alto livello?
- 4. CSS per selezionare il livello più alto di un
- 5. C# GUI e il delegato utilizzano come livello di astrazione
- 6. Libreria grafica di alto livello
- 7. Come abilitare il livello di avviso più alto nel compilatore GCC (Boost è molto utilizzato)
- 8. Il personaggio Unicode più alto?
- 9. come mantenere gtk.window sempre al livello più alto
- 10. Mappatura relazionale oggetto vs livello di astrazione del database
- 11. Rendi veramente NSWindow il livello più alto (sopra il mouse, sopra il controllo missione/esporre)
- 12. di alto livello documentazione relativa alla classe
- 13. $ rootScope è il genitore del più alto $ scope?
- 14. Qual è la differenza tra un'API Java di alto livello e di basso livello?
- 15. jQuery trova il genitore più alto TD
- 16. Trovare il valore più alto in un'enumerazione
- 17. Linguaggio di sistema di alto livello che compila in c?
- 18. C# perché non è possibile sovrascrivere la proprietà statica? (Come possono le classi di alto livello chiamare il metodo della classe base con i dati di alto livello)
- 19. Astrazioni di multithreading/concorrenza di alto livello per .NET
- 20. Creazione astrazione con CSS
- 21. Qual è il modo migliore per risolvere l'ECCEZIONE ECCEZIONALE DI ALTO LIVELLO?
- 22. libreria ruby di alto livello per la crittografia
- 23. trovare il valore più alto all'interno di livelli di fattore
- 24. Ottenere il valore più alto di una colonna in MongoDB
- 25. Rails: errore troppo alto nel livello di stack
- 26. Scala costruttore astrazione
- 27. Linguaggio di programmazione di alto livello per composizione musicale
- 28. NASM è puro assemblaggio, ma MASM è assemblaggio di alto livello?
- 29. mongodb: trovare il valore numerico più alto di una colonna
- 30. astrazione contro classe astratta
Ecco il mio commento: cosa? Devi spiegare di più. –
Tipo di interfaccia errato.Dovresti taggare questo con OOP e qualsiasi lingua tu stia parlando, così possiamo indirizzarti nella giusta direzione. –
Queste terminologie sono diverse in lingue diverse. Immagino che OOPS sia uguale ovunque. – Rohit