c# - que - programacion orientada a objetos pdf
¿Qué son los objetos de primera clase en Java y C#? (8)
Cuando hablamos de "objetos de primera clase" por "objetos" nos referimos a algunos conceptos del lenguaje, no a los objetos que creamos en ese lenguaje. Es por eso que también existen términos como "ciudadanos de primera clase".
Así, por ejemplo, Java tiene los siguientes conceptos: objetos Java, primitivos Java, campos, métodos y otros (por objetos Java me refiero a cualquier instancia que sea un tipo de Objeto). Diría que en Java, tanto los objetos Java como los primitivos Java son ciudadanos de primera clase en el lenguaje.
En C # tenemos algunos conceptos adicionales que podemos "probar" para las propiedades de primera clase. Por ejemplo, los delegados. Podemos asignar delegado a variable (dar un nombre), pasarlo al método como un argumento, devolverlo desde el método, incorporarlo en estructuras de datos (por ejemplo, un diccionario de delegados). Así que creo que podemos decir que los delegados son objetos de primera clase en C #. Puedes continuar por otros conceptos de C # - eventos, propiedades ...
Los lenguajes funcionales tienen un concepto de "función" y, por supuesto, es un ciudadano de primera clase en cualquier lenguaje funcional. Diría que podemos llamar lenguaje al lenguaje funcional si tiene "función" como concepto de primera clase (nombre, pase, retorno, incorporación ...).
Entonces, si algún lenguaje trae algunos conceptos, podemos "medir" el poder de estos conceptos en el lenguaje mismo.
Cuando comencé a programar en OO hace muchos años, tuve la impresión de que las variables (si es la palabra correcta) eran "primitivas" (int, doble, etc.) u objetos de primera clase (String, JPane, etc.). Esto se ve reforzado por una respuesta reciente sobre primitivas en Java y C # (@Daniel Pryden: ¿Son diferentes los tipos primitivos en Java y C #? ). Sin embargo, no sé si los C # ValueTypes son primitivos, objetos o alguna otra bestia como los objetos de segunda clase. Veo que SO solo tiene un uso de la etiqueta de first-class
así que quizás ya no sea un término útil.
No encontré útil el artículo de Wikipedia ("Este artículo necesita la atención de un experto en el tema"). Agradecería una taxonomía y el uso actual de los términos, principalmente relacionados con Java y C # (aunque tal vez otros idiomas arrojen la iluminación).
Aclaración : me gustaría entender el término de primera clase y cuál es su rango de uso.
El problema es que el "objeto de primera clase" no es un concepto bien definido.
El uso normal es que alguien dice que un "objeto" es una clase de cosas que debería tener todas las propiedades X, Y y Z. Pero hay otras cosas que no tienen todas esas propiedades, pero son una especie de objeto-ish. Así que llamaremos los objetos anteriores de "primera clase" y el resto no "primera clase" ... y pueden no ser objetos.
El problema es que hay una cantidad de vistas en las propiedades que una cosa necesita tener para convertirlo en un objeto de "primera clase". Y no hay perspectivas de que las personas con puntos de vista opuestos lleguen a un consenso. (Por ejemplo, un experto en lenguaje Javascript podría argumentar enérgicamente que un objeto es solo de primera clase si está basado en plantillas).
Las únicas ideas realmente sólidas sobre la "primera clase" serán aquellas que se pueden extraer de las especificaciones de idioma respectivas para Java y C #. Y solo se aplican realmente dentro del alcance de los respectivos idiomas / sistemas de tipos ... y no en múltiples idiomas.
Por lo tanto, "objeto Java de primera clase" o "objeto C # de primera clase" puede ser significativo, pero "objeto de primera clase" sacado de contexto no lo es.
Bueno esa es mi opinión ...
En .NET no tienes tipos primitivos vs clases. En su lugar, tiene estructuras vs clases, pero las estructuras comparten muchas de las características de las clases (como la capacidad de tener propiedades y métodos), y también heredan de la clase Object
.
Cuando escribes int
en C #, por ejemplo, es solo un atajo de idioma para la estructura Int32
. Puede hacer, por ejemplo, int i=int.Parse("34")
, o incluso la string s=1234.ToString()
. Para asignar instancias de estructura a variables de tipo Object
, existe el mecanismo de boxeo / desempaquetado .
En Java, por otro lado, tienes los tipos primitivos frente a las clases de dicotomía. Entonces, por ejemplo, para realizar operaciones en una variable de tipo int
, debe usar la clase Integer
auxiliar. Esa es una de las cosas que no me gustan de Java en comparación con .NET.
Editar . Cuando lees sobre "objetos de primera clase" (o clases), significa "objetos con potencia completa", es decir, clases que tienen las mismas capacidades que cualquier otra clase de sistema o clases creadas por el usuario. Esto es para distinguir de "tipos primitivos limitados".
Francamente, no tengo idea de lo que es un "objeto de primera clase" ...
Pero primero encontré el uso de un lenguaje similar en la documentación y la lista de correo de Lua, diciendo que las funciones son ciudadanos de primera clase o valores de primera clase.
Le dejo a uno de los autores de Lua que explique qué es: Programación en Lua: 6 - Más sobre Funciones
Significa que, en Lua, una función es un valor con los mismos derechos que los valores convencionales, como los números y las cadenas. Las funciones se pueden almacenar en variables (tanto globales como locales) y en tablas, se pueden pasar como argumentos y otras funciones pueden devolverlas.
De alguna manera, esta definición se aplica a los objetos en Java: puede almacenarlos en variables, en matrices, usarlos como parámetros de función y devolverlos, usarlos como clave de HashMap y otras colecciones, etc.
No estoy seguro de si es así como se usa el término para los objetos, pero al menos tiene sentido ... :-)
En un lenguaje como C, los objetos deben hacerse desde cero, usando algunos trucos (recreando C ++, de alguna manera ...), por lo que no son de primera clase: hay que pasar los punteros para manipularlos.
La idea de "ciudadano de primera clase" o "elemento de primera clase" en un lenguaje de programación fue presentada por el científico británico de computación Christopher Strachey en la década de 1960 en el contexto de funciones de primera clase. La formulación más famosa de este principio es probablemente en Estructura e interpretación de programas de computadora de Gerald Jay Sussman y Harry Abelson:
- Pueden ser nombrados por variables.
- Pueden ser pasados como argumentos a procedimientos.
- Pueden ser devueltos como resultado de los procedimientos.
- Pueden ser incluidos en las estructuras de datos.
Básicamente, significa que puedes hacer con este elemento del lenguaje de programación todo lo que puedes hacer con todos los demás elementos del lenguaje de programación.
Los objetos de primera clase son aquellos objetos que creamos sin usar la palabra clave ''nuevo''. Normalmente creamos un objeto usando la palabra clave "nueva", pero creamos un objeto en el lenguaje de programación sin usar la palabra clave "nueva".
En java ''String'' es un objeto de primera clase. Es un concepto Java y no es un concepto stander para todos los lenguajes de programación.
Para cada tipo de datos primitivos en Java, la biblioteca de clases principales proporciona una clase envoltura que lo representa como un objeto Java. Por ejemplo, la clase Int32 ajusta el tipo de datos int, y la clase Double ajusta el tipo de datos doble.
Por otro lado, todos los tipos de datos primitivos en C # son objetos en el espacio de nombres del Sistema. Para cada tipo de datos, se proporciona un nombre corto o alias. Por ejemplo, int es el nombre corto de System.Int32 y double es la forma abreviada de System.Double.
La lista de tipos de datos de C # y sus alias se proporciona en la siguiente tabla. Como puede ver, los primeros ocho de estos corresponden a los tipos primitivos disponibles en Java. Tenga en cuenta, sin embargo, que el booleano de Java se llama bool en C #.
De: http://msdn.microsoft.com/en-us/library/ms228360%28VS.80,lightweight%29.aspx
http://onjava.com/onjava/2003/05/21/delegates.html
en otras palabras, los métodos c # son objetos de primera clase porque podemos pasarlos a otro método. Podemos usar métodos como cualquier otro valor (cadenas, números, objeto creado por el usuario).
Otro ejemplo de objetos de primera clase que u puede encontrar poco común en otros idiomas pero c # es Expresiones