Question

Quand j'ai commencé il y a OO programmation de nombreuses années, j'eu l'impression que les variables (si tel est le mot juste) étaient « primitives » (int, double, etc.) ou des objets de première classe (String, JPane, etc. ). Ceci est renforcé par une réponse récente sur des primitives en Java et C # (Pryden @ Daniel: sont des types primitifs différents en Java et C #? ). Cependant, ne savent pas si C # types de valeur sont des primitives, des objets ou une autre bête comme des objets de seconde classe. Je vois que SO n'a qu'une seule utilisation de la balise first-class alors peut-être qu'il ne soit plus un terme utile.

Je ne trouve pas l'article de Wikipedia utile ( "Cet article est dans le besoin de l'attention d'un expert sur le sujet. »). Je serais reconnaissant pour l'utilisation de la taxonomie et actuelle des termes, principalement liés à Java et C # (mais peut-être d'autres langues jetteront l'illumination).

Précision :. Je voudrais comprendre le terme de première classe et quelle est sa plage d'utilisation est

Était-ce utile?

La solution

Le problème est que « objet de première classe » est pas un concept bien défini.

L'utilisation normale est que quelqu'un dit qu'un « objet » est une classe de chose que devrait ont toutes les propriétés X, Y et Z. Mais il y a d'autres choses qui ne sont pas toutes ces propriétés, mais ils sont en quelque sorte-ish objet. Donc, nous allons appeler les anciens objets « de première classe » et le reste pas « première classe » ... et peut-être pas des objets.

Le problème est qu'il ya un certain nombre de vues sur les propriétés qu'une chose a besoin d'avoir pour en faire un objet « première classe ». Et aucune perspective du peuple avec des vues opposées à trouver un consensus. (Par exemple, un expert en langue Javascript pourrait soutenir qu'un objet énergiquement est seulement la première classe si elle est. Basé sur un modèle)

Les seules idées vraiment solides sur « première classness » seront ceux que vous pouvez glaner des spécifications linguistiques respectives pour Java et C #. Et ils ne s'appliquent vraiment dans le cadre des langues / systèmes de type respectifs ... et non en plusieurs langues.

« premier objet de classe Java » ou « première classe C # objet » pourrait être significatif, mais « premier objet de classe » hors contexte n'est pas.

Eh bien, c'est mon opinion ...

Autres conseils

La notion de « citoyen de première classe » ou « élément de première classe » dans un langage de programmation a été introduite par l'informaticien britannique Christopher Strachey dans les années 1960 dans le cadre de la première classe les fonctions. La formulation la plus célèbre de ce principe est probablement Structure et interprétation des programmes informatiques par Gerald Jay Sussman et Harry Abelson:

  • Ils peuvent être nommés par des variables.
  • Ils peuvent être passés comme arguments aux procédures.
  • Ils peuvent être retournés que les résultats des procédures.
  • Ils peuvent être inclus dans les structures de données.

En gros, cela signifie que vous pouvez faire avec cet élément langage de programmation tout ce que vous pouvez faire avec tous les autres éléments du langage de programmation.

Dans .NET vous n'avez pas des types primitifs vs classes. Au lieu de cela, vous avez struct vs classes, mais struct partagent de nombreuses caractéristiques des classes (comme la possibilité d'avoir des propriétés et méthodes), et hérite de la classe Object ainsi.

Lorsque vous écrivez int en C #, par exemple, il est juste un raccourci de langage pour la struct Int32. Vous pouvez le faire par exemple int i=int.Parse("34"), ou même string s=1234.ToString(). Pour affecter les instances de struct à des variables de type Object, il y a la boxe / unboxing mécanisme .

En Java, d'autre part, vous avez en effet les types primitifs contre les classes dichotomie. Ainsi, par exemple pour effectuer des opérations sur une variable de type int, vous devez utiliser la classe Integer auxiliaire. C'est l'une des choses que je fais pas comme de Java par rapport à .NET.

EDIT . Lorsque vous lisez sur les « objets de première classe » (ou classes), cela signifie « objets entièrement alimentés », qui est, les classes qui ont les mêmes capacités que les autres classes ou catégories en utilisateur. Cela permet de distinguer des « types primitifs limités ».

Pour chaque type de données primitive en Java, la bibliothèque de classes de base fournit une classe wrapper qu'il représente comme un objet Java. Par exemple, la classe Int32 encapsule le type de données int, et la classe Double enveloppe le type de données double.

D'autre part, tous les types de données primitifs en C # sont des objets dans l'espace de noms System. Pour chaque type de données, un nom court, ou alias, est fourni. Par exemple, int est le nom court pour System.Int32 et double est la forme abrégée de System.Double.

La liste des types de données C # et leurs alias est fourni dans le tableau suivant. Comme vous pouvez le voir, les huit premiers de ceux-ci correspondent aux types primitifs disponibles en Java. Notez toutefois que la valeur booléenne de Java est appelé bool en C #.

De: http: // msdn .microsoft.com / fr-fr / bibliothèque / ms228360% 28VS.80, léger% 29.aspx

http://onjava.com/onjava/2003/05/21 /delegates.html

dans d'autres mots c # méthodes sont objet de première classe parce que nous pouvons passer dans une autre méthode. nous pouvons utiliser des méthodes comme toutes les autres valeurs (chaînes, nombres, objet créé par l'utilisateur).

Un autre exemple de objets de première classe que u peut trouver rare dans d'autres langues, mais c # est des expressions

Franchement, je ne sais pas ce qu'est un « objet de première classe » est ...
Mais j'ai trouvé l'utilisation d'un langage similaire dans la documentation Lua et liste de diffusion, en disant que les fonctions sont des citoyens de première classe, ou des valeurs de première classe.

Je laisse l'un des auteurs de Lua pour expliquer ce qu'il est: programmation en Lua: 6 - en savoir plus sur les fonctions

  

Cela signifie que, dans Lua, une fonction est un   valeur avec les mêmes droits que   des valeurs conventionnelles comme le nombre et   cordes. Les fonctions peuvent être stockées dans   variables (à la fois globales et locales) et   dans les tableaux, peut être passé comme arguments,   et peuvent être retournés par d'autres   fonctions.

D'une certaine façon, cette définition s'applique aux objets Java: vous pouvez les stocker dans des variables, dans les tableaux, les utiliser comme paramètres de la fonction et les retourner, les utiliser comme clé de HashMap et d'autres collections, etc.
Je ne sais pas si c'est comment le terme est utilisé pour les objets, mais au moins il est logique ...: -)

Dans un langage comme C, les objets doivent être fabriqués à partir de zéro, en utilisant quelques astuces (recréer C ++, en quelque sorte ...), donc ils ne sont pas de première classe: vous devez passer des pointeurs autour de les manipuler.

Quand nous parlons des « objets de première classe » par « objets », nous entendons certains concepts de la langue, et non pas les objets que nous créons dans cette langue. Voilà pourquoi il y a aussi des termes comme « citoyens de première classe ».

Ainsi, par exemple, Java a des concepts suivants - objets Java, Java primitives, champs, méthodes et autres (par des objets Java Je veux dire tout ce qui est par exemple du type d'objet). Je dirais que, dans les deux objets Java Java et primitives Java sont des citoyens de première classe dans la langue.

En C #, nous avons quelques concepts supplémentaires que nous pouvons « test » pour les propriétés de première classe. Par exemple, les délégués. Nous pouvons assigner la variable délégué ot (donner un nom), passez à la méthode comme argument, le renvoyer de méthode, incorporer dans des structures de données (un dictionnaire de délégués par exemple). Je pense donc que nous pouvons dire que les délégués sont des objets de première classe en C #. Vous pouvez continuer à d'autres concepts de C # - événements, propriétés ...

Les langages fonctionnels ont concept de « fonction » et bien sûr, il est un citoyen de première classe dans l'une langue fonctionnelle. Je dirais que nous pouvons appeler la langue une langue fonctionnelle si elle a « fonction » comme un concept de première classe (nom, passe, retour, intégrer ...).

Donc, si un langage apporter quelques concepts que nous pouvons « mesurer » la puissance de ces concepts dans la langue elle-même.

Les objets de première classe sont les objets que nous créons sans utiliser mot-clé « nouveau ». Normalement, nous créons des objets en utilisant un « nouveau » mot-clé, mais un objet dans un langage de programmation, nous créons sans utiliser mot-clé « nouveau ».

En java « String » est un objet de première classe. Il est un concept java et il est pas un concept stander pour tous les langages de programmation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top