Question

Depuis le débat sans sens des termes est pas de sens, J'ai pensé que je serait point à l'éléphant dans la pièce et demandez:Que fait exactement un langage "orienté objet"?Je ne suis pas à la recherche d'un manuel de réponse ici, mais l'un en fonction de votre expérience avec les langages orientés objets qui fonctionnent bien dans votre domaine, quel qu'il soit.

Une question connexe, qui peuvent aider à répondre à la première est:Quelle est l'archétype des langages orientés objet et pourquoi?

Était-ce utile?

La solution

Définitions pour l'Orientation de l'Objet évidemment énorme boîte de pandore, mais ici, ce sont mes 2 cents:

Pour moi, l'Orientation de l'Objet est sur tous les objets qui collaborent par l'envoi de messages.C'est, pour moi, la seule et la plus importante caractéristique d'un langage orienté-objet.

Si je devais mettre en place une liste ordonnée de toutes les fonctionnalités d'un langage orienté objet doit avoir, il devrait ressembler à ceci:

  1. Les objets de l'envoi de messages à d'autres objets
  2. Tout est un Objet
  3. La Liaison Tardive
  4. Sous-Type De Polymorphisme
  5. L'héritage ou quelque chose de la même façon expressive, comme Délégation
  6. L'Encapsulation
  7. Se Cacher De L'Information
  8. L'Abstraction

Évidemment, cette liste est très controversé, puisqu'il exclut une grande variété de langues qui sont largement considérés comme étant orientée objet, comme Java, C# et C++, tout en violant les points 1, 2 et 3.Cependant, il ne fait aucun doute que ces langages permettent de programmation orienté-objet, mais le fait de C) et même de faciliter (qui C qui ne marche pas).Donc, j'en viens à l'appel de langues que de répondre à ces exigences "purement orienté objet".

Comme l'archétype des langages orientés objet, j'appellerais Auto et Novlangue.

À la fois satisfaire les exigences mentionnées ci-dessus.Les deux sont inspirés par et les successeurs de Smalltalk, et les deux arrivent à être "plus OO" dans un certain sens.Les choses que j'aime à propos de l'Auto et de la Novlangue sont que de prendre le message de l'envoi d'un paradigme à l'extrême (Novlangue même plus que Moi).

En Novlangue, tout est un message envoyer.Il n'y a pas de variables d'instance, pas de champs, pas d'attributs, sans constantes, pas de noms de classe.Ils sont tous des émules en utilisant les getters et les setters.

Dans l'Auto, il y a pas de cours, seuls les objets.Cela met en évidence, ce qui est OO vraiment sujet:des objets, et non des classes.

Autres conseils

Selon Booch, les éléments suivants:Les principaux:

  • L'Abstraction
  • L'Encapsulation
  • La modularité
  • Hiérarchie (L'Héritage)

Mineur:

  • En tapant
  • La simultanéité
  • La persistance

Fondamentalement Orientée Objet vraiment se résume à "passage de messages"

Dans un langage procédural, j'appelle une fonction comme ceci :

  f(x)

Et le nom de f est probablement lié à un bloc de code particulier au moment de la compilation.(Sauf si c'est un langage procédural avec des fonctions d'ordre supérieur ou de pointeurs de fonctions, mais laisse ignorer que la possibilité d'une seconde.) Donc cette ligne de code ne peut signifier qu'une sans ambiguïté chose.

Dans un langage orienté objet, je passe un message à un objet, peut-être comme ceci :

 o.m(x) 

Dans ce cas.m n'est pas le nom d'un bloc de code, mais un "sélecteur de la méthode" et le bloc de code est appelé dépend en réalité de l'objet o, d'une certaine façon.Cette ligne de code est plus ambigu ou général, car il peut signifier différentes choses dans différentes situations, en fonction de l'o.

Dans la majorité des langages à objets, l'objet o a une "classe", et la classe détermine le bloc de code est appelé.Dans un couple des langages à objets (le plus célèbre, Javascript) o n'a pas de classe, mais a des méthodes directement attaché à elle au moment de l'exécution, ou a hérité d'un prototype.

Mon démarcation, c'est que ni les classes ni d'héritage sont nécessaires pour qu'une langue soit OO.Mais ce polymorphes gestion des messages est essentiel.

Bien que vous pouvez simuler cet effet avec des pointeurs de fonction en C, ce n'est pas suffisant pour la C d'être appelé un langage OO, parce que vous allez avoir à mettre en place votre propre infrastructure.Vous pouvez le faire, et un OO style est possible, mais la langue n'a pas donné pour vous.

Ce n'est pas vraiment les langues OO, c'est le code.

Il est possible d'écrire orientée objet C de code (avec les structures et même pointeur de fonction les membres, si vous le souhaitez) et j'ai vu pas mal d'exemples.(Tremblement de terre 2/3 SDK vient à l'esprit.) Il est également possible d'écrire de procédure (c'est à direnon OO) du code en C++.

Étant donné que, je dirais que c'est la langue de support pour la rédaction d'un bon OO code qui en fait un "Langage Orienté Objet." Je n'aurais jamais embêter avec l'aide de pointeur de fonction des membres dans les structures en C, par exemple, pour ce qui serait ordinaire des fonctions de membre;donc je vais dire que C est pas un langage OO.

(Étendre sur ce, on pourrait dire que Python n'est pas orienté objet, soit, avec l'obligatoire "auto" de référence sur chaque étape et les constructeurs appelé init, étagère;mais c'est un Débat Religieux.)

Smalltalk est généralement considéré comme l'archétype du langage OO, bien que Simula est souvent cité comme étant le premier langage OO.

Courant OO langues peuvent être vaguement classés par langue, ils empruntent la plupart des concepts à partir de:

  • Smalltalk-comme:Ruby, Objective-C
  • Simula-comme:C++, Pascal Objet, Java, C#

Aussi loin que je peux dire, le principal point de vue qui est un langage "Orienté Objet", soutient l'idée de regroupement des données, et les méthodes de travail sur les données, ce qui est généralement réalisé par des classes, des modules, héritage, polymorphisme, etc.

Voir cette discussion pour un aperçu de ce que pensent les gens (la pensée?) L'Orientation de l'objet signifie.

Comme "l'archétype du" langage OO - c'est, en effet, Smalltalk, comme Kristopher souligné.

Prend en charge les classes, méthodes, attributs, l'encapsulation, les données de la clandestinité, de l'héritage, le polymorphisme, l'abstraction...?

Ignorant les implications théoriques, il semble être

"Une langue qui a un mot-clé appelée "classe"" :- P

Pour ce aib dit, je dirais qu'une langue n'est pas vraiment orienté objet, à moins que les bibliothèques standard disponibles sont orientées objet.Le plus grand exemple de ceci est PHP.Bien qu'il prend en charge tous les standards des concepts orientés objet, le fait qu'un grand pourcentage de la norme de bibliothèques ne sont pas orientées objet, signifie qu'il est presque impossible d'écrire votre code dans un objet orienté vers les.

Il n'est pas question qu'elles mettent en place des espaces de noms si toutes les bibliothèques standard vous exiger de préfixe de tous vos appels de fonction avec des trucs comme mysql_ et pgsql_, lorsque, dans un langage soutenu les espaces de noms dans l'API, vous pourriez se débarrasser de fonctions mysql_ et ont juste un simple "inclure système.db.mysql.*" en haut de votre fichier de sorte qu'il serait de savoir où les choses viennent.

quand vous pouvez faire des classes, il est orienté objet
par exemple :java est orienté objet, javascript et c++ ressemble à une sorte de "objet curieux" de la langue

Dans mon expérience, les langues ne sont pas orienté objet, le code est.

Il y A quelques années j'ai écrit une série de programmes en AppleScript, qui n'a pas vraiment d'appliquer toutes les fonctionnalités orientées objet, quand j'ai commencé à grok OO.Il est maladroit d'écrire des Objets en AppleScript, mais il est possible de créer des classes, constructeurs, et ainsi de suite si vous prenez le temps de trouver comment.

La langue était la langue correcte pour le domaine:l'obtention de différents programmes sur le Macintosh à travailler ensemble pour accomplir certaines automatique de tâches basées sur des fichiers d'entrée.Prendre la peine de s'auto-appliquer un style orienté objets était le bon choix de programmation, car il a entraîné dans le code plus facile à dépanner, de tester et de comprendre.

La fonction que j'ai remarqué que la plupart de changer le code de procédure pour OO a été encapsulation:à la fois des propriétés et des appels de méthode.

Simples:(comparer l'assurance de caractères)

1-le Polymorphisme 2-l'Héritage 3-l'Encapsulation 4-Re-utiliser.:)

Objet:Un objet est un référentiel de données.Par exemple, si ma liste est une liste d ' achats de l'objet, Maliste pouvez enregistrer votre liste de courses.

Classe:Une classe est un type d'objet.Beaucoup d'objets de la même classe peuvent exister;par exemple, Maliste et YourList peut à la fois être liste d ' achats d'objets.

Méthode:Une procédure ou une fonction qui fonctionne sur un objet ou d'une classe.Une méthode est associée à une classe particulière.Par exemple, addItem peut être une méthode qui ajoute un élément à n'importe quel liste d ' achats de l'objet.Parfois, une méthode est associée à une famille de classes.Par exemple, addItem peut fonctionner sur n'importe quelle Liste, dont une liste d ' achats est juste un type.

L'héritage:Une classe peut hériter des propriétés d'une classe plus générale.Par exemple, la liste d ' achats de classe hérite de la classe List la propriété de stocker une séquence d'éléments.

Polymorphisme:La possibilité d'avoir un appel de méthode de travail sur plusieurs classes d'objets, même si les classes ont besoin de différentes implémentations de l'appel de méthode.Par exemple, une ligne de code pourrait être en mesure d'appeler la "addItem" méthode sur chaque type de Liste, même si l'ajout d'un élément à une liste d ' achats est complètement différent de l'ajout d'un élément à un ShoppingCart.

Orienté-Objet:Chaque objet connaît sa propre classe et les méthodes de manipuler les objets de la classe.Chaque liste d ' achats et de chaque ShoppingCart connaît la mise en œuvre de addItem s'applique à elle.

Dans cette liste, la seule chose qui distingue vraiment des langages orientés objet à partir de langages procéduraux (C, Fortran, Basic, Pascal) est le polymorphisme.

Source: https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd

Je suis heureux de partager avec vous les gars, c'était très intéressant et utile pour moi.Ceci est un extrait de 1994 Rolling Stone interview où Steve (pas un programmeur) explique la programmation orientée objet en termes simples.

Jeff Goodell:Pourriez-vous expliquer, en termes simples, exactement ce logiciel orienté objet est?

Steve Jobs:Les objets sont comme les gens.Ils sont la vie, la respiration des choses qui ont des connaissances à l'intérieur d'eux sur la façon de faire les choses et d'avoir de la mémoire à l'intérieur de sorte qu'ils peuvent se souvenir des choses.Et plutôt que d'interagir avec eux à un niveau très faible, vous pouvez interagir avec eux à un très haut niveau d'abstraction, comme nous le faisons ici.

Voici un exemple:Si je suis votre lessive objet, vous pouvez me donner vos vêtements sales et de m'envoyer un message qui dit: “Pouvez-vous obtenir mes vêtements lavés, s'il vous plaît.” Je sais où le meilleur de blanchisserie lieu à San Francisco.Et je parle anglais, et j'ai de dollars dans mes poches.Donc je sors et je me héler un taxi et dire au chauffeur de me conduire à cet endroit dans le quartier de San Francisco.Je vais chercher vos vêtements lavés, je saute en arrière dans la cabine, je serai de retour ici.Je vous donne la propreté de vos vêtements et de dire, “Voici la propreté de vos vêtements.”

Vous n'avez aucune idée de comment je l'ai fait.Vous n'avez aucune connaissance de la blanchisserie place.Peut-être que vous parlez français, et vous ne pouvez même pas héler un taxi.Vous ne pouvez pas payer pour un, vous n'avez pas d'argent dans votre poche.Pourtant, je savais comment faire tout cela.Et vous n'avez pas à savoir tout ça.Toute cette complexité était cachée à l'intérieur de moi, et nous avons été en mesure d'interagir à un niveau très élevé d'abstraction.C'est ce que les objets sont.Ils intégrer la complexité, et les interfaces de cette complexité sont de haut niveau.

Archétype

La capacité à exprimer des scénarios du monde réel dans le code.

foreach(House house in location.Houses)
{
 foreach(Deliverable mail in new Mailbag(new Deliverable[]
              {
              GetLetters(), 
              GetPackages(), 
              GetAdvertisingJunk()
              })
 {
    if(mail.AddressedTo(house))
    {
        house.Deliver(mail);
    }
 }
}

-

foreach(Deliverable myMail in GetMail())
{
    IReadable readable = myMail as IReadable;
    if ( readable != null )
    {
        Console.WriteLine(readable.Text);
    }
}

Pourquoi?

Pour nous aider à comprendre plus facilement.Il est plus logique dans nos têtes et s'il est appliqué correctement rend le code plus efficace, réutilisable et réduit à la répétition.

Pour ce faire, vous devez:

  • Pointeurs/Références pour s'assurer que cette == ce et ce != qu'.
  • Les Classes à point (par ex.Bras) qui stockent les données (int hairyness) et des opérations (Throw(IThrowable))
  • Polymorphisme (Héritage et/ou des Interfaces) pour traiter des objets spécifiques dans un générique de la mode, donc vous pouvez lire des livres ainsi que des graffitis sur le mur (à la fois de mettre en œuvre IReadable)
  • L'Encapsulation parce que apple n'a pas d'exposer une des Atomes [la propriété]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top