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.
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