2010-07-13 21 views
30

Estaba hablando con un compañero de trabajo sobre C y C++ y afirmó que C está orientado a objetos, pero afirmé que no lo era. Sé que puedes hacer cosas parecidas a objetos en C, pero C++ es un verdadero lenguaje orientado a objetos.¿Está el lenguaje de programación C orientado a objetos?

¿Cuáles son sus pensamientos?

Además, desencadenó la discusión sobre quién decide qué significa estar orientado a objetos y que es difícil decir qué significa realmente orientado a objetos. ¿Qué piensas sobre esto?

+30

Haga que todos estén de acuerdo en una definición de Object Oriented y, a continuación, podré responder a la pregunta. – Yacoby

+2

Programación orientada a objetos (OOP) es un paradigma de programación que utiliza "objetos" (estructuras de datos que consisten en campos de datos y métodos junto con sus interacciones) para diseñar aplicaciones y programas de computadora. Las técnicas de programación pueden incluir características tales como abstracción de datos, encapsulación, modularidad, polimorfismo y herencia. No se usó comúnmente en el desarrollo de aplicaciones de software convencional hasta principios de la década de 1990. [cita requerida] Muchos lenguajes de programación modernos ahora admiten OOP. –

+5

Esa es solo una definición. Tengo que amar el '[cita requerida]' por cierto;) –

Respuesta

50

If by "¿C está orientado a objetos?" quieres decir "¿C está diseñado con instalaciones específicamente para soportar programación orientada a objetos?" entonces, no, C claramente no está orientado a objetos.

+17

+1 La única forma de decir un idioma es "insertar paradigma" es afirmar si facilita o impone el paradigma con construcciones de lenguaje. – pmr

8

C no está orientado a objetos. Ese fue todo el propósito detrás de ++

En cuanto a una definición de lo que se necesita para ser orientado a objetos: marque wikipedia.

Personalmente, si es compatible con herencia, encapsulación y polimorfismo, entonces está listo. Otra clave aquí es tener palabras clave agradables como clase y objeto tienden a ayudar ...

ejemplos de lenguajes orientados a objetos reales (no concluyente) son: Smalltalk, Java, C#, Python, Ruby, C++ ..

Además, es posible tener extensiones para proporcionar características OO como PHP, Perl, VB (no .Net), ...

+0

Por favor explique ... No quiero simplemente un no por respuesta. –

+0

Si son ["reales"] (http://stackoverflow.com/questions/3222316/what-is-a-real-programming-language/3226182#3226182) OO languages, ¿hay alguno falso? –

+2

@Roger Pate: los "falsos" son los que tienen una carilla OO como vb.net y php. No están construidos desde una perspectiva de OO, pero proporcionan al menos alguna facilidad para el desarrollo de OO. – NotMe

0

No, no es así, su amigo está equivocado.

+0

Por favor explique ... No quiero simplemente un no por respuesta. –

+0

Bueno, el lenguaje no se orienta directamente a la programación orientada a objetos, por lo que me parece bastante obvio. –

+3

"¿Está el lenguaje de programación C orientado a objetos?" "¿No porque?" "Porque no es" –

8

Los programadores reales pueden escribir código orientado a objetos en CUALQUIER idioma.

Pero no, C no es un lenguaje 'orientado a objetos'. No tiene ningún concepto de clases, objetos, polimorfismo, herencia.

+1

I argee - es posible escribir código OO en cualquier idioma. Refactoricé recientemente un programa heredado de C para dividir los módulos en espacios de nombres, y juntar todos los códigos y variables relevantes. Es sorprendente cómo aumentó la capacidad de mantenimiento del programa: tenía que verlo para creerlo (se admitía que requería un compilador de C++ para admitir espacios de nombres, pero creo que los espacios de nombres deberían ser parte de C en cualquier caso). – Contango

+0

@Contango: ¿Estás seguro de que no? No uso demasiado C, pero cada vez que lo hago, siempre me sorprende la cantidad de funciones que se han agregado en los últimos 30 años que las personas consideran como si no existieran. IE, matrices de tamaño variable (C09?) Y variables 'const' (C89). – ArtOfWarfare

17

Puede programar en un estilo orientado a objetos en más o menos cualquier idioma. (Creo que el polimorfismo en tiempo de ejecución - es decir, métodos virtuales - requiere un lenguaje compatible con punteros de función.)

Aquí hay un par de ejemplos:

+5

Recuerdo a un colega que una vez leyó sobre OO Perl. Leí el libro, y mi alma se estremeció – johnc

+2

Re punteros a mi función comentario: Desafío a cualquiera a programar OO en BASIC (el original, no este material visual) –

3

la confusión puede ser que C se puede utilizar para poner en práctica conceptos orientados a objetos como polimorfismo, encapsulación, etc. que m Ay, haz que tu amigo crea que C está orientado a objetos. El problema es que para ser considerado un lenguaje de programación orientado a objetos, estas características deberían estar integradas en el lenguaje. Que ellos no son

1

A menos que su amigo estuviera hablando sobre Objective C (un superconjunto OO de C), entonces no, C no es un lenguaje OO. Puede implementar conceptos de OO utilizando C (eso es lo que hizo el compilador de C++ antiguo, tradujo C++ a C), pero eso no convierte a C en un lenguaje OO, ya que no ofrece específicamente soporte para técnicas estándar de OO como polimorfismo o encapsulación.

Sí, puede escribir el estilo OO del software en C, especialmente con el uso liberal (ab-) de macros pero como alguien que ha visto los resultados de algunos de esos intentos, le sugiero encarecidamente que utilice un lenguaje más adecuado .

1

Los programadores reales pueden escribir código orientado a objetos en CUALQUIER idioma.

I have visto Object Oriented Cobol. Cobol que llama a Cobol. ¿Quieres llamar a estos programadores "Real"?

+3

Soy un programador falso. En realidad, no existo e incluso cuando creo que puedo existir, mi código es falso de todos modos. A veces desearía ser real. –

+1

[insertar una broma acerca de los números imaginarios aquí] – Earlz

3
  1. C no está orientado a objetos en sentido estricto ya que no tiene una capacidad orientada a objetos compatible con sintaxis incorporada como clase, herencia, etc.

Pero si conoce el truco, puede agregar fácilmente la función orientada a objetos simplemente utilizando struct, puntero a la función, & auto puntero. DirectFB es una biblioteca de C escrita de forma orientada a objetos. Lo malo es que es más propenso a errores ya que no se rige por la sintaxis y la comprobación del tipo de compilación. Se basa en la convención de codificación en su lugar.

p. Ej.

IDirectFB/*a typedef of a struct*/ *dfb = NULL; 
    IDirectFBSurface/*another typedef of a struct*/ *primary = NULL; 
    DirectFBCreate (&dfb); /*factory method to create a struct (e.g. dfb) with 
         pointers to function and data. This struct is 
         like an object/instance of a class in a language with build-in 
         syntax support for object oriented capability */ 
    dfb->SetCooperativeLevel/*function pointer*/ 
      (dfb/*self pointer to the object dfb*/, 
      DFSCL_FULLSCREEN); 
    dsc.flags = DSDESC_CAPS; 
    dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING; 
    dfb->CreateSurface/*function pointer, also a factory method 
         to create another object/instance */ 
      (dfb/*self pointer to the object dfb*/, 
      &dsc, 
      &primary/*another struct work as object of another class created*/); 
    primary->GetSize/*function pointer*/ 
       (primary/*self pointer to the object primary*/, 
       &screen_width, 
       &screen_height); 

2. C++ está orientado a objetos, ya que tiene soporte integrado para capacidades orientadas a objetos como clase y herencia. Pero existe el argumento de que no es un lenguaje orientado a objetos completo o puro, ya que permite la sintaxis C (sintaxis de programación estructural) en él. También recuerdo que C++ carece de algunas capacidades orientadas a objetos, pero no recuerda exactamente cada una.

2

C no es un lenguaje O-O bajo ninguna definición de "O-O" e "idioma".

Es bastante fácil usar C como el lenguaje de implementación para un componente que proporciona una API O-O a sus clientes. El sistema X Windows es esencialmente un sistema O-O de herencia única cuando se lo ve desde su API, pero con un desorden total de C al ver su implementación.

+2

Esta vista se expresa adecuadamente mediante las respuestas existentes. –

0

C no es un lenguaje orientado a objetos. C es un lenguaje imperativo de propósito general que admite la programación estructurada. Como C no está orientado a objetos, se creó C++ para tener la característica de OOP y OOP es un modelo de lenguaje de programación organizado alrededor de objetos. Un lenguaje para tener características de OOP necesita implementar ciertos principios de OOP. Algunos de ellos son herencia, polimorfismo, abstracción, encapsulación.

0

respuesta puede ser sí o no, dependiendo de: "? C es un lenguaje orientado a objetos"

  • si preguntas , la respuesta es "no", ya que no tienen constructores orientados a objetos, palabras clave, etc ... semántica

  • si tiene la intención "puedo realizar programación orientada a objetos en C?", la respuesta es sí, porque OOP no solo es un requisito de un idioma, sino también una forma de "pensar", un enfoque de programación, antes de tocar un idioma u otro. Sin embargo, la implementación de OOP en C (o en cualquier otro idioma no diseñado originalmente para ser OOP) seguramente será "forzado" y mucho más difícil de manejar que cualquier otro lenguaje OOP, por lo que también cabe esperar cierta limitación.

Cuestiones relacionadas