Confus quant à la définition de «l'abstraction» dans la POO

16

J'essaie de comprendre la définition de «l'abstraction» dans la POO.

J'ai rencontré quelques définitions principales. Sont-ils tous valables? Est-ce que l'un d'eux a tort? Je suis confus. (J'ai réécrit la définition avec mes propres mots).

Définition 1:

L'abstraction est le concept de prendre un objet du monde réel et de le convertir en termes de programmation. Tels que la création d' une Humanclasse et lui donnant int health, int age,String name , etc. propriétés et eat()méthodes , etc..

Définition 2:

Une définition plus générale. L'abstraction est un concept qui se déroule n'importe où dans un système logiciel où «rendre les choses plus générales / plus simples / abstraites» est impliqué. Quelques exemples:

  • Une hiérarchie d'héritage, où les classes supérieures sont plus simples ou plus générales, et définissent une implémentation plus générale et abstraite. Alors que les classes inférieures de la hiérarchie sont plus concrètes et définissent des implémentations plus détaillées.

  • Utiliser l'encapsulation pour cacher les détails de l'implémentation d'une classe aux autres classes, rendant ainsi la classe plus «abstraite» (plus simple) pour le monde logiciel extérieur.

Définition 3

Une autre définition générale: l'abstraction est le concept de déplacer le focus des détails et de la mise en œuvre concrète des choses, vers les types de choses (par exemple les classes), les opérations disponibles (par exemple les méthodes), etc., rendant ainsi la programmation plus simple, plus générale, et plus abstrait. (Cela peut avoir lieu n'importe où et dans n'importe quel contexte dans le système logiciel). Il a lieu par exemple lors de l'encapsulation, car l'encapsulation signifie cacher les détails de l'implémentation et n'afficher que les types de choses et leurs définitions plus générales et abstraites. Un exemple anotehr serait d'utiliser un Listobjet en Java. cet objet utilise en fait les détails d'implémentation d'un ArrayListou d'un LinkedList, mais ces informations sont abstraites en utilisant le nom plus général List.

L'une de ces définitions est-elle correcte? (Je fais référence à la définition la plus conventionnelle et acceptée ).

Aviv Cohn
la source
L'abstraction définit une "chose" comme étant un certain TYPE de chose (Animal => Chien) afin de la réduire encore plus (Chien => Caniche).
Christine

Réponses:

22

L'abstraction est l'un des 3 piliers de la programmation orientée objet (POO). Cela signifie littéralement de percevoir une entité dans un système ou un contexte dans une perspective particulière. Nous supprimons les détails inutiles et nous nous concentrons uniquement sur les aspects nécessaires au contexte ou au système considéré.

Voici une bonne explication:

En tant que personne, vous avez des relations différentes dans des rôles différents. Lorsque vous êtes à l'école, vous êtes alors un «étudiant» . Lorsque vous êtes au travail, vous êtes un «employé» . Lorsque vous êtes dans une institution gouvernementale, vous pouvez être considéré comme un "citoyen" . Cela se résume donc à ce dans quel contexte regardons-nous une entité / un objet. Donc, si je modélise un système de paie , je vous considérerai comme un employé (PRN, temps plein / temps partiel, désignation) . Si je modélise un système d'inscription aux cours , je considérerai vos aspects et caractéristiques en tant qu'étudiant (numéro de rôle, âge, sexe, cours inscrit) . Et si je modélise un système d'information sur la sécurité socialealors je vais regarder vos coordonnées en tant queCitoyen (comme DOB, sexe, pays de naissance, etc.)

Rappelez-vous que l'abstraction (en se concentrant sur les détails nécessaires) est différente de l'encapsulation (en cachant les détails du monde extérieur). L'encapsulation signifie cacher les détails de l'objet et fournir une interface décente aux entités du monde extérieur pour interagir avec cet objet ou cette entité. Par exemple, si quelqu'un veut connaître mon nom, il ne peut pas accéder directement à mes cellules cérébrales pour savoir quel est mon nom. Au lieu de cela, cette personne demandera mon nom. Si un conducteur souhaite accélérer un véhicule, il existe une interface (pédale d'accélérateur, vitesse, etc.) à cet effet.

La 1ère déf. N'est pas très claire. La Def 2 est bonne mais elle a tendance à confondre le débutant car il essaie de lier l'abstraction à l'encapsulation et à l'héritage. Def 3 est la meilleure des 3 définitions car elle définit clairement ce qu'est l'abstraction avec précision.

Maxood
la source
3
Donc, vous diriez que c'est comme une généralisation au lieu d'une spécification?
Robert Rocha
1
@samyismyhero Exactement! Nous recherchons des attributs génériques et le comportement des objets pour l'abstraction.
Maxood
[Animal => Chien] est une abstraction. Vous définissez les parties possibles qu'un «animal» peut avoir pour créer un «chien». (Queue, pattes, fourrure, etc.). Ensuite, vous pouvez utiliser la classe "Dog" pour définir un caniche, un pit-bull, etc. Ainsi, vous déclarez des races de chiens basées sur la classe "Dog" au lieu d'un "Animal".
Christine
3

La définition 1 n'est certainement pas une abstraction. Cela décrit plus précisément la modélisation .

Les définitions 2 et 3 décrivent la même chose. Et les deux sont de très bonnes descriptions d'une abstraction.

Euphorique
la source
C'est ce que je pensais! abstract class Shapelol!
Robert Rocha
2

Chacune de ces définitions est très bien.

L'abstraction est l'endroit où vous vous concentrez uniquement sur les détails qui sont importants pour votre objectif.

Dans le premier cas, vous (actuellement) ne pouvez pas inclure de vraies personnes dans votre code; vous vous concentrez sur des détails particuliers d'une personne qui répondent à votre objectif. Dans un autre programme, vous devrez peut-être vous concentrer sur différents détails. Ce seraient des abstractions différentes d'une personne, et chacune peut être également valable dans leur contexte .

Les deuxième et troisième définitions poursuivent cette idée en l'appliquant aux entités logicielles.

andy256
la source