sintaxis programar programacion lenguaje ejemplos desde cómo codigos cero basicos oop language-agnostic

oop - programar - programacion en java pdf



Conceptos principales en OOP (14)

3 conceptos principales en OOP:

  • Enlace tardío
  • Reutilización de conceptos (no estoy seguro de esto, de todos modos: reutilización de conceptos, evitando la reimplementación incluso de los conceptos más simples)
  • Abstracción

Una vez me preguntaron en una entrevista ''¿Cuáles son los 3 conceptos principales de OOP?''. Respondí diciendo que en mi opinión había 4 que son los siguientes:

  • Herencia
  • Encapsulación
  • Abstracción
  • Polimorfismo

¿Estaba en lo correcto?


Diría que la abstracción no es únicamente un concepto de OOP, ya que puede abstraerse en gran medida en muchos idiomas que no son de OOP.


El problema con OOP es que nadie se molestó en dar una definición adecuada , concisa y acordada. Especialmente, me gustaría señalar que todos los aspectos que mencionas pueden ponerse en acción sin el uso de la orientación a objetos.

Dos sistemas de tipo que hacen esto son el sistema de tipo Haskell, que, por consenso, generalmente no se considera orientado a objetos, y las plantillas de C ++ con subclases de plantilla. Sin embargo, podría argumentarse que la creación de subclases de plantillas emula el OOP.

Como la creación de subclases de plantillas no es un mecanismo ampliamente conocido, permítanme dar un ejemplo de la biblioteca SeqAn donde se inventó.

String<Char> cstr = "This is a test"; String<Dna, Packed<> > dstr = "GATTACA"; cout << "length(" << cstr << ") = " << length(cstr) << endl; cout << "length(" << dstr << ") = " << length(dstr) << endl;

Aquí, String<Char> y String<Dna, Packed<> > se heredan de la "clase abstracta " String<> . Encapsulan el concepto de una cadena, utilizando métodos completamente diferentes. Comparten el método de length polimórfica , implementado de manera diferente para ambos tipos de concreto.


Eso es correcto.

Sin embargo, si tuviste que proporcionar solo uno, Abstracción tiene que ser, de una forma u otra, el resto tres es simplemente Abstracción en acción .


Esos son los cuatro jinetes tal como los conozco. Tal vez agrupan por error la Herencia y el Polimorfismo juntos.


Este [artículo] [1] se refiere a los tres pilares del buen código. Encontré que es un artículo excelente que postula que la encapsulación es el "primer principio" del diseño orientado a objetos.

Los "primeros" principios son fundamentales, principios subyacentes de los cuales todo lo demás surge. El autor usa el ejemplo de la regla de oro. Es difícil enseñarle a los niños todos los puntos más delicados del comportamiento civilizado, pero si logras que entiendan (y más importante aún, practiquen) la Regla de oro de tratar a los demás como te gustaría que te traten, entonces es más probable que "consigan" todos los estándares legales y morales a los que estamos sujetos todos los días.

Por lo tanto, se deduce que si un desarrollador entiende la encapsulación como un "Primer Principio" de desarrollo orientado a objetos, todos los otros principios seguirán a su debido tiempo.

No le hago justicia al contenido del autor, pero definitivamente recomendaría a la gente que lo lea.

Por alguna razón, no estoy mostrando el hipervínculo, así que aquí está la URL: http://www.netobjectives.com/files/Encapsulation_First_Principle_Object_Oriented_Design.pdf


Hay 3 requisitos para que un idioma esté orientado a objetos:

  • un lenguaje que solo admite la encapsulación (objetos) no está orientado a objetos, pero es modular
  • un lenguaje que solo admite la encapsulación (objetos) y el paso de mensajes (polimorfismo) no está orientado a objetos, sino que está basado en objetos
  • un lenguaje que admite la encapsulación (objetos), el paso de mensajes (polimorfismo) y la herencia (abstracción), está orientado a objetos

NOTA: la abstracción es un concepto mucho más general; la encapsulación y otros son tipos de abstracción, del mismo modo que una subrutina es un tipo de abstracción. Ver abstracción


La mayoría de la gente lo consideraría correcto, supongo que si pidieran tres sería Herencia, Encapsulación y Polimorfismo.

Personalmente encuentro que esos tres conceptos son la verdadera "carne" si lo haces detrás de la definición de OOP. Y la mayoría de las personas da por descontada la abstracción y la ilumina con las demás, ya que realmente podría considerarse parte de cualquiera de las otras tres.

Cuando hablo de OOP aunque siempre menciono el 4.


Probablemente, los últimos tres es lo que estaban buscando: se podría argumentar que la herencia es más un mecanismo para ayudar a alcanzar a los otros, que son objetivos de mayor nivel.

En realidad, no hay una respuesta correcta, especialmente si se limita a ''top 3''.


Pudo haber sido una pregunta capciosa para la entrevista, pero en las clases de Informática estos días enseñan los 4 Pilares de la Programación Orientada a Objetos.


Sí, esos son los cuatro estándares.

Algunas personas combinan abstracción y encapsulación. No estoy seguro de por qué ... no son completamente ortogonales, ¿pero tal vez haya suficiente superposición? Ciertamente hay una superposición entre la herencia y el polimorfismo, pero sería difícil combinarlos, en mi opinión.


Una respuesta adecuada a la pregunta es: "Por favor, aclare lo que quiere decir con programación orientada a objetos". Oops, eso sería revelador, porque la verdadera pregunta es: "Cuando digo POO, ¿qué quiero decir?"

No hay una respuesta correcta.


Los cuatro pilares son como su estado correcto

  • Encapsulación
  • Abstracción
  • Herencia
  • Polimorfismo

La encapsulación trata de contener datos, nada más, nada menos.

La abstracción se ocupa de la abstracción de datos, es decir, todos estos datos son realmente relevantes. Piense en un banco que contenga información sobre nombre, edad, dirección, color de ojos, corbata favorita, etc. ¿El color de los ojos y el lazo favorito son realmente relevantes para los requisitos de los bancos? No. Esto es abstracción.

La herencia se refiere a la generalización. Información que puede aplicarse a más de una cosa. Si algo hereda de algo, entonces puede decirse que es un tipo más específico de esa cosa. Por ejemplo, Animal. Un perro es un tipo de animal, por lo que el perro hereda de un animal. Jack Russell es un tipo de perro, por lo que Jack Russell hereda de Perro.

El polimorfismo se ocupa de cosas que tienen formas múltiples, (poli - morfo). Dos tipos de programación,

  • Encuadernación tardía,
  • Te refieres a algo ya que es de tipo general y, por lo tanto, el compilador no sabe a qué enlazar en tiempo de compilación. Método de reflexión Anulación.

  • Enlace temprano

  • Usted redefine un método usando una firma diferente, es decir, int add(int a, int b) vs double add(double a, double b)

Estos son esencialmente los principios básicos de la orientación a objetos. Hay mucha superposición entre estos y por eso es muy importante lograr una comprensión clara de lo que significa cada uno de ellos.


En general, se cree que esos son los principios principales, sin embargo, tuvieron muy poco que ver con el motivo por el que se creó OO.

Uno de los principios rectores fue la metáfora de la manipulación directa. Eso es crear un objeto en el programa que representa un objeto del modelo mental de los usuarios. La mayor parte de la motivación para crear OO se basó en la psicología, no en las matemáticas / CS, como a menudo se cree que es el caso en estos días.

Si duda de esto, eche un vistazo a parte del trabajo de Trygve Renskauge. Padre de MVC y DCI o James Coplien logran autor y orador.

Por lo tanto, diría que es probable que les hayas dado una respuesta cercana a lo que esperaban, si lo correcto depende de dónde estés parado.