Programación Orientada a Objetos: ¿Por qué "Orientada"?

14

Casi he terminado mi carrera de programación de juegos. Esto no es un título en ciencias de la computación, por lo que gran parte de la teoría se evita a favor de la creación práctica de carteras y lo que veo como aprendizaje JIT, que aparentemente es más importante en la industria de los juegos. El primer tema fue "Introducción a la programación orientada a objetos".

Esa frase no me molestó hasta que aprendí sobre los diferentes paradigmas de programación (obtengo esta lista de https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms ):

  • Imperativo
  • Funcional
  • Procesal
  • Estructurado
  • Evento conducido
  • Orientado a objetos
  • Declarativo
  • Basado en autómatas

Entiendo que esta no es una lista exhaustiva, y que no todos estos conceptos son iguales, y la mayoría de ellos ni siquiera son exclusivos, pero no entiendo por qué la mayoría de ellos solo tienen una palabra: imperativo; funcional; declarativo, pero cuando hablamos de programación con objetos, tenemos que aclarar que estamos orientados en torno a esos objetos. ¿No podemos simplemente usar objetos? ¿No podemos simplemente tener objetos? ¿Por qué deben orientarnos , como nuestra estrella guía?

Mirando aquí ( https://en.wikipedia.org/wiki/Object-oriented_programming ), en ninguna parte se utiliza el término "orientado" como su propio término. Solo se explica el "objeto".

Además, puedo ver por razones prácticas por qué se utiliza Event-Driven, porque la programación de eventos ya es algo que se hace cuando se realiza una conferencia, y la programación automática hace que parezca que está configurando una línea de producción robótica, por lo tanto, ayuda tener palabras aclaratorias adicionales allí.

¿Qué hace que la programación de objetos, como frase, no sea suficiente para describir lo que hacemos cuando usamos objetos en nuestra programación?

Obviamente, por mi tono, no me gusta demasiado la palabra "orientado". Me recuerda a mi tiempo como reportero de la corte, escuchando a un abogado tras otro usar la frase "en relación con" como una especie de señal verbal. No significaba nada; era solo un término que usaban para llenar el aire mientras trataban de pensar qué decir a continuación. Sin embargo, no estoy tratando de abogar por un cambio de idioma, solo estoy preguntando por qué es así. Si alguien sabe por qué se supo de esa manera por razones puramente históricas y vestigiales, entonces esa es la respuesta. Será una munición si alguna vez decido perder el tiempo abogando por un cambio de idioma.

Por otro lado, si realmente hay una razón útil de por qué un lenguaje o código debe apuntar hacia los objetos, con exclusión de todas las demás direcciones, en lugar de simplemente tenerlas en su cinturón de herramientas , como herramientas , realmente estaría interesado en aprender al respecto. Me gusta aprender cosas útiles.

Excrubulento
fuente
11
Supongo que "Objetivamente" u "Objecional" no daría la impresión correcta de lo que realmente significa ;-)
Doc Brown
Lo consideré "Objetivado", pero decidí que también podría emitir las vibraciones equivocadas.
Excrubulento
1
Creo que "objeto" es el error, no "orientado". Lo que llamamos orientado a objetos suele estar orientado a clases.
Steve314
1
¿Cualquier fanático de Phoenix Wright quiere llamarlo "OBJECCIÓN! Programación"?
Katana314

Respuestas:

24

Creo que está leyendo manera demasiado en un simple construcción gramatical. Eche un vistazo a su lista de paradigmas, ordenados de manera diferente por una razón que veremos en breve:

  • Imperativo
  • Funcional
  • Procesal
  • Estructurado
  • Declarativo
  • Evento conducido
  • Basado en autómatas
  • Orientado a objetos

¿Qué tienen en común todas las palabras? Todos son adjetivos porque están destinados a modificar la palabra "programación". Además, con la excepción del "imperativo", no todos son adjetivos "naturales", sino sustantivos "adjetivos", sustantivos que realmente describen el núcleo del paradigma: función, estructura, autómatas y objeto.

Y hay dos formas diferentes en que los sustantivos se adjetivan: a través de un sufijo como -al o -ed, o mediante la creación de una palabra compuesta usando un guión. Ahora, como ha señalado Doc Brown, los sufijos que podrían usarse para adjetivar "objeto" tienen un significado diferente. Lo que deja la composición.

Y afirmo que es pura coincidencia o gusto que Alan Kay eligió usar "orientado" para su adjetivo compuesto "orientado a objetos". También podría haber sido "impulsado por objetos" o "basado en objetos", y también podría leer demasiado en ellos. ¿No "impulsado" suena como una especie de obsesión malsana?

Michael Borgwardt
fuente
1
Excelente punto (aunque creo que te refieres a adjetivos, no a adverbios: "programación" en este contexto es un sustantivo).
JW01
@ JW01: Ups, tienes razón
Michael Borgwardt
Este es realmente un muy buen punto: la palabra "orientado" le da a la frase un significado diferente a "programación de objetos", porque la palabra "objeto" en sí misma no es un adjetivo. En realidad, yo diría que la razón por la que se eligió "orientado" sobre otras palabras fue por la aliteración. Además, no estaba leyendo nada, estaba exagerando para señalar que existe esta palabra "orientado" que se encuentra allí completamente inexplicable e incuestionable en la literatura, lo que me hizo preguntarme si realmente estaba haciendo algo para ganar su lugar. . : P
Excrubulento
Me pregunto por qué no eligió obsesionarse con los objetos ... oh sí, esos son solo los fanáticos que no saben cuándo detenerse. ;-)
Deduplicator
Hay un libro de un autor polaco, Jerzy Grębosz, llamado "Symfonia C ++" ("La sinfonía en C ++") en el que el autor intenta darle sentido a esa frase de una manera interesante: dice que se llama " orientado a objetos "debido al hecho de que el código puede" orientarse a sí mismo "de acuerdo con el objeto con el que está trabajando actualmente (comportamiento polimórfico). Él distingue esto de los lenguajes en los que existe un mero concepto de "objetos" como datos. No hay evidencia histórica de que este fuera el significado original, pero es bastante explicativo incluso como una explicación posterior al hecho.
BarbaraKwarc 01 de
18

pero cuando hablamos de programación con objetos, tenemos que aclarar que estamos orientados alrededor de esos objetos. ¿No podemos simplemente usar objetos? ¿No podemos simplemente tener objetos?

Francamente, es un remanente de la historia. La programación funcional es realmente programación orientada a funciones, la programación declarativa es realmente programación orientada a declaraciones ... después de todo, ¿no solo usamos funciones? ¿No podemos simplemente tener funciones?

"Orientado a objetos" sale mejor de la lengua e históricamente está arraigado.

La 'orientación' viene porque no estamos hablando de programación sino de diseño. El hecho de que usemos objetos, o usemos funciones, o usemos eventos no significa que nuestra metodología de diseño se realice modelando los tres. Al especificar la orientación de la metodología de diseño, ayuda a comunicar a los programadores cómo deben interpretar y extender ese diseño, cómo el enfoque de modelado colorea la implementación.

Telastyn
fuente
Así que parece que estás diciendo que "orientado a objetos" es un tipo de declaración de política con fraseo redundante, al igual que "proactivo" tiene esencialmente el mismo significado que "activo", solo tiene un prefijo redundante adjunto para hacer Seguro que el oyente no pierde el significado.
Excrubulento
1
Creo que realmente has dado en el clavo: hacemos diseño orientado a objetos, y es por eso que los lenguajes están orientados a objetos, para permitirnos expresar este diseño.
K.Steff
1
@Excrubulent No, agregar el "orientado" lo hace más específico. "Orientado a objetos" significa que no estamos discutiendo detalles específicos sobre la programación de objetos, sino más bien sobre cómo diseñar programas para que usen objetos de manera significativa. "Programación de objetos", "programación de funciones" o "programación de declaraciones" se referirían específicamente a hablar sobre la implementación de ese concepto específico en lugar de los principios de diseño. "Funcional" y "declarativo" son palabras con sufijos que intentan transmitir el mismo significado, pero para objetos "objetivos" u "objetivos" no tendría mucho sentido.
Ilari Kajaste
Y como respondió Michael Borgwardt , la palabra "orientado" no es de ninguna manera especial. También podría ser "impulsado" o "basado". El punto importante es que no podría ser "programación de objetos". (Bueno, laguange siempre es fluida, por lo que podría , pero no sería tan descriptivo.)
Ilari Kajaste
He cambiado las respuestas porque la respuesta de Michael Borgwardt en realidad explica el significado de la palabra y cómo modifica la frase.
Excrubulento el
2

Llamarlo así ayuda a explicar que los objetos son una parte muy importante del paradigma.

La programación orientada a objetos tiene sus raíces en Simula , que era esencialmente ALGOL más algunas características nuevas de programación de objetos. Y de acuerdo con esa historia, incluso hoy en día es completamente posible en muchos idiomas (incluso los "lenguajes OO puros") codificar algo que es esencialmente solo un programa de procedimiento con algunos objetos en él. Pero esto es considerado un mal estilo por los desarrolladores más experimentados.

En realidad, hacer algo "de la manera orientada a objetos" es muy diferente de "la forma de procedimiento". El concepto más importante es el uso de la herencia y el polimorfismo. Cuando realmente entiendes e internalizas la forma en que funcionan las clases y los métodos virtuales, es una experiencia reveladora que cambia la forma en que escribes código en muchos casos, un verdadero cambio de paradigma. (Suponiendo, por supuesto, que primero comenzaste a escribir código de procedimiento. Muchos estudiantes en estos días van directamente a Java o C # como primer idioma, e IMO se pierden en comprender realmente los beneficios de OO al hacerlo).

Lo llamamos programación orientada a objetos porque un programa escrito en estilo OO no solo contiene objetos; La estructura de todo el programa se basa en ellos y en su forma de trabajar.

Mason Wheeler
fuente
Esta es una respuesta similar a la de Telastyn, excepto que parece implicar que "programación orientada a objetos" como término es en realidad fundamentalmente diferente a "programación de objetos". ¿Puedes explicar cómo podrían ser diferentes? Quiero decir, me parece que OOP es un término lo suficientemente flojo como para que OP también cumpla la misma función.
Excrubulento
2
Muchos estudiantes en estos días van directamente a Java o C # como primer idioma, y ​​en mi opinión se pierden en comprender realmente los beneficios de OO al hacerlo. - En realidad, comencé en C ++, y en mi primera asignación utilicé una combinación de objetos y funciones, pero fui marcado por mi uso de funciones. Algunas de esas funciones eran puramente funcionales, y no se beneficiaron en absoluto de la encapsulación en un objeto, pero otras que tomaron punteros a las variables para funcionar (es decir: información de estado modificada), se hicieron mucho más fáciles de hacer y llamar una vez que fueron en un objeto, así que he visto ambos lados.
Excrubulento