2009-07-29 6 views
6

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?

+1

Ecco il mio commento: cosa? Devi spiegare di più. –

+0

Tipo di interfaccia errato.Dovresti taggare questo con OOP e qualsiasi lingua tu stia parlando, così possiamo indirizzarti nella giusta direzione. –

+0

Queste terminologie sono diverse in lingue diverse. Immagino che OOPS sia uguale ovunque. – Rohit

risposta

13

Penso che la tua terminologia sia confusa.

  1. Encapsulation - inserisce dati e funzionalità in un'unica posizione. Possiamo ottenere questo attraverso le classi

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

  1. 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) .
  2. 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.
  3. Un'interfaccia dichiara solo i tipi di comportamento , incapsulando il comportamento in un tipo. Esso fornisce alcuna comportamento reale o dati
  4. Una classe astratta dichiara tipi di comportamento, ma può anche fornire comportamenti e dei dati, il tutto incapsulato in un tipo.
  5. Pertanto, l'interfaccia può essere visto a fornire un semplice o pura forma di polimorfismo di astratte classi.
+0

Posso dire che l'astrazione è la gerarchia più alta che si ottiene attraverso l'incapsulamento e il polimorfismo. – Rohit

+1

Questo cancella ogni cosa. Grazie amico. – Rohit

+0

Prego, grazie. –

4

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.

1

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.

2

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.

Problemi correlati