2010-07-28 21 views
6

C# soporta 4 características básicas de los lenguajes orientados a objetos:¿Es C# un lenguaje de programación orientado a objetos 100%?

  1. Abstracción
  2. encapsulación
  3. polimorfismo
  4. Herencia

¿Puedo decir C# es un lenguaje de programación completamente orientado a objetos? ¿Por qué?

+14

Puedes decirlo. No significa nada en el idioma inglés. –

+0

¿Quiere decir que C# _ ** es ** _ 100% lenguaje de programación orientado a objetos? ¿Esa es la pregunta? –

+0

He ajustado el inglés. –

Respuesta

20

que depende de su definición de "Object Oriented Programming Language".
Usando su definición, sí C# cumple con el 100% de los requisitos:

  1. Abstracción
  2. encapsulación
  3. polimorfismo
  4. Herencia

Sin embargo, C# contiene características que no son estrictamente "Orientación a Objetos" como

  • enumeraciones
  • tipos de valor
  • Los métodos estáticos
  • clases estáticas

, así que diría que, independientemente de la definición que desea utilizar, C# no es un pura Lenguaje de programación orientado a objetos.

+0

Entonces, ¿cuál es la definición real de lenguaje de programación orientado a objetos? – chanchal1987

+3

Si tan solo supiera a qué se refería con Abstraction. –

+0

@Steven - Quién sabe. Como C# tiene clases abstractas y permite escribir "abstracciones" (como cualquier lenguaje de programación), diré que cumple este vago requisito. – Greg

0

Algunos puristas insistirán en que C# no está completamente orientado a objetos porque carece de herencia múltiple.

+1

¿Qué idiomas permiten la herencia múltiple y cómo solucionan el problema de los diamantes? –

+0

La falta de herencia múltiple no descalifica a C# como orientado a objetos Es solo una característica adicional de otros lenguajes como C –

+0

Carlos: No estoy seguro de estar en desacuerdo contigo. Solo digo que la vista * purista * requiere herencia múltiple, que informa un hecho. –

3

Nadie sabe qué significa "100% orientado a objetos". Probablemente C# no lo es, ya que no todo es un objeto.

Algunas cosas que no son objetos:

  1. Los bloques de código. Es cierto que puede tener un objeto como un Func que es un bloque de código. Pero en algunos idiomas, todo el código es realmente objetos.
  2. primitivos (int, float, double, corta, etc.)
  3. funciones
+2

¿Qué es * no * un objeto? –

+1

@Steven Sudit: los punteros no administrados no son un objeto afaik. – ShdNx

+0

@ShdNx: ¿Pero deberíamos considerar el código no administrado como una parte verdadera de C#, o simplemente una extensión para hacer que C# sea interoperable con sistemas externos (posiblemente no orientados a objetos)? –

2

Muchas funciones hacen que C# no esté totalmente orientado a objetos. Sin embargo, no creo que ningún idioma esté 100% "orientado a objetos" y (¿casi?) Todos los lenguajes son al menos un poco multi-paradigma. Por ejemplo, delegados. A very biased source señala que los delegados, una construcción en C# que amo, no es un "ciudadano de primera clase" entre los objetos. Java no es compatible con herencia múltiple, pero creo que es el lenguaje más orientado a objetos que existe. C++ lo hace, pero claramente no está 100% orientado a objetos, ya que un programa C++ 100% basado en funciones puede escribirse fácilmente (solo compila casi cualquier programa C).
Depende más del uso del idioma que del idioma en sí. Es orientado a hacia objetos pero no exclusivamente compuesto de objetos, al igual que otros idiomas. ¿Responder a esta pregunta ayudará a que alguien escriba un código significativamente mejor? Yo personalmente no lo creo, Richard Feynman dijo: "Aprendí muy pronto la diferencia entre saber el nombre de algo y saber algo". No importa si puede llamarse "orientado a objetos", ya que cualquier cosa, desde Perl a Python, a CIL o a Ada tiene características orientadas a objetos, y C# tiene características que no están orientadas a objetos.

+0

Creo que Ruby está más orientado a objetos que Java .... – tster

+0

no es Scala OO puro? –

0

Sí, puede decir que C# es un lenguaje totalmente orientado a objetos. Piénselo de esta manera, no solo es compatible con los cuatro criterios de OOP, también requiere que esencialmente todos sus constructos estén encapsulados en objetos (enumeraciones o tipos de valores que no sean POO puros no me influirían como una excepción particularmente importante) . Es decir, C# no le permite desarrollar fuera de de la metodología OOP en cualquier forma significativa . Donde a veces las personas dicen que un idioma no es realmente OOP es donde la orientación del objeto es opcional, como C++ donde puede desarrollar C puro si lo desea.

Una nota: Steven señala que no es compatible con herencia múltiple. Sin embargo, eso no lo descalifica: OOP no depende de la inclusión de esta característica (y la experiencia nos ha enseñado que, en el mejor de los casos, es una bendición mixta). Eso sería como decir que un automóvil no es un "automóvil" a menos que tenga una cámara de respaldo, ya que algunos autos lo tienen.

Cuestiones relacionadas