2016-06-15 37 views
1

Lassen Sie uns sagen, dass ich diese Methode habenWird eine Methode erstellt, die als Abstraktion betrachtet wird?

void print(String msg){ 
System.out.println(msg); 
} 

Da ich ein Verfahren geschaffen, das druckt, ich habe ich alles falsch weiß nicht, wie es druckt es, so ist dies eine Abstraktion betrachtet, oder bin immer?

+0

Abstraktion ist, wenn Sie mehrere austauschbare Verhaltensweisen haben, die über eine gemeinsame Schnittstelle beispielsweise über Schnittstellen manipuliert werden. Wenn Sie also eine IPrinter-Schnittstelle haben, die mehrere Drucker mit ihren eigenen Druckversionen geerbt haben, wäre das eine Abstraktion. –

+0

Erwägen Sie, konzeptionelle Fragen zur Softwareentwicklung auf http://programmers.stackexchange.com zu stellen. – everton

+0

Der Begriff [Abstraktion] (https: //en.wikipedia.org/wiki/Abstraction_(software_engineering)) bezieht sich auf so viele Dinge in der Programmierung. Eine Methode ist definitiv eine Kontrollabstraktion, da sie die Details davon abstrahiert, wie gedruckt wird. Der Argumenttyp "String" wäre eine Datenabstraktion. Es ist die gewählte Generalisierung, die die meisten Druck-Anwendungsfälle berücksichtigen sollte. Man könnte auch 'print (Datei-Datei)' und 'Datei' wäre auch eine Abstraktion, aber höchstwahrscheinlich auf der falschen Abstraktionsebene, da es wahrscheinlich eine schlechte Generalisierung ist. – plalx

Antwort

0

Wenn Sie diese Methode erstellt haben einfach die Details der zugrunde liegenden Implementierung zu verstecken, dann ist es Verkapselung.

Ihre Methode ist nicht abstrakt, da es sich um eine konkrete Implementierung handelt. Sie können es nur als abstrakt bezeichnen, wenn Sie die Signatur in einer Schnittstelle oder als abstrakte Methode in einer abstrakten Klasse definieren.

aus Java Tutorial:

Eine abstrakte Methode ist eine Methode, die ohne eine Implementierung (ohne Klammern und durch ein Semikolon) deklariert wird, wie folgt aus:

abstract void moveTo(double deltaX, double deltaY);

Alles abstrakte kann in Gedanke oder als eine Idee existieren, aber keine physische oder konkrete Existenz. Dies kam auf, als ich nach der Definition von Abstrakt in Google suchte (https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=abstract%20definition).

+0

Ich Judt gab dies als ein Beispiel, was ich feststellen möchte, ist wenn Sie eine Methode erstellen und diese Methode komplizierte Sachen macht, ist diese Methode eine Abstraktion von dem, was Sie tun möchten. Wenn Sie beispielsweise einen Mitarbeiter in einer Datenbank speichern möchten, müssen Sie nur die Methode saveEmployee() aufrufen –

+0

Ihre Schnittstelle 'IPrintable' macht keinen Sinn. Warum müssten Sie eine Zeichenfolge an ein druckbares Objekt übergeben? Vielleicht meintest du "IPrinter"? – plalx

+0

Thx zum Zeigen. Das wurde behoben. – randominstanceOfLivingThing

0

Bis zu einem gewissen Grad ja, das ist Abstraktion, alles, was verwendet, muss nicht wissen, wie es druckt, nur dass es tut. Ein besseres Beispiel wäre die Verwendung eines Repos.

interface UserRepo { 
    public User getUserByUsername(final String username); 
    public User updateUser(final User user); 
} 

Sie Code dann gegen die Schnittstelle. bei Verwendung von Feder Dependency Injection Zum Beispiel:

@Service 
public class UserService { 
    @Resource 
    private UserRepo userRepo; 

    public void updateUserEmail(final String username, final String newEmail) { 
    final User user = userRepo.getUserByUsername(username); 
    user.setEmail(newEmail); 
    userRepo.updateUser(user); 
    } 

Userservice nicht weiß, wie das Repo die Nutzer wird immer nur, dass es ist, könnte eine Datenbank verwenden, eine flache Datei oder eine Webservice.

Here is some more info on Abstraction, with pictures!

Also this details the difference between abstraction and polymorphism