¿Cuál es esa característica según usted que ha hecho que la programación orientada a objetos sea tan exitosa?
- Paso de mensajes
- Herencia
- Polimorfismo
- Encapsulamiento
O alguna otra característica que le gustaría presentar.
También me gustaría saber cuál es la conexión entre el tipo de datos abstractos y la programación orientada a objetos.
object-oriented
Tony
fuente
fuente
Respuestas:
Sugeriría que la característica más importante de la programación orientada a objetos es la de la gestión de la complejidad .
El cerebro humano solo puede contener tantos conceptos a la vez: me viene a la mente el límite a menudo citado de recordar 7 +/- 2 elementos independientes.
Cuando estoy trabajando en un sistema de 600kloc en el trabajo, no puedo tener todo en mi cabeza de una vez. Si tuviera que hacer eso, estaría limitado a trabajar en sistemas mucho más pequeños.
Afortunadamente, no tengo que hacerlo. Los diversos patrones de diseño y otras estructuras que hemos utilizado en ese proyecto significan que no tengo que lidiar con todo el sistema a la vez: puedo recoger piezas individuales y trabajar en ellas, sabiendo que encajan en la aplicación más amplia de maneras bien definidas
Todos los conceptos importantes de OO proporcionan formas de gestionar la complejidad.
Encapsulación : permítame tratar con una API externa que me proporciona varios servicios, sin preocuparme de cómo se implementan esos servicios.
Abstracción : déjame concentrarme en las características esenciales e ignorar lo que no es relevante.
Composición : permítanme reutilizar componentes que ya se han construido en nuevas combinaciones.
Polimorfismo : permítame solicitar un servicio sin preocuparme de cómo los diferentes objetos podrían proporcionarlo de diferentes maneras.
Herencia : permítame reutilizar una interfaz o una implementación, proporcionando solo las piezas que son diferentes de lo que había sucedido antes.
Principio de responsabilidad única : mantengamos el propósito de cada objeto claro y conciso, por lo que es fácil razonar sobre
Prinicple de sustitución de Liskov : no dejemos trampas entre nosotros introduciendo dependencias impares
Principio abierto / cerrado : permitamos la extensión y modificación de formas que no requieran que corramos el riesgo de romper el código existente
Inyección de dependencias : llevemos la composición al siguiente nivel y ensamblemos los componentes mucho más tarde.
Desarrollo orientado a la interfaz : llevemos la abstracción al siguiente nivel y solo dependamos de la abstracción, nunca de una implementación concreta.
fuente
Interfaces gráficas de usuario. A fines de los años ochenta, principios de los noventa, cuando Macs, Amigas, Atari ST, Windows y GEM comenzaron a reemplazar las interfaces de usuario basadas en caracteres, se hizo evidente que lenguajes como C no son adecuados para escribir programas GUI. Si bien el procesamiento de datos tradicional se considera como un esquema de "datos de entrada -> procesamiento -> datos de salida", que también podría hacerse en un lenguaje de procedimiento, las características de OO son útiles para manejar la complejidad inherente de una GUI.
fuente
La ocultación de datos proporcionada por la encapsulación.
fuente
Una característica que aún no ha sido mencionada por ninguna de las otras respuestas: modelado de dominio . Debido a que las personas tienden a pensar en hacer cosas con o con objetos, y en objetos que tienen propiedades intrínsecas, es muy fácil modelar un problema o flujo de trabajo utilizando un software orientado a objetos. Esencialmente, nos permite usar nuestra capacidad existente para tratar con sustantivos, verbos y adjetivos en código.
fuente
Creo que la herencia es el punto más importante de la POO.
[del desarrollo del juego] Puedes crear algo así como una clase Drawable, con métodos y atributos de representación, y crear una clase de Nave espacial y Planeta, que hereda de Drawable. Tome todos los objetos de esos [y otro niño Sprite], agregue un drawableObjArray y simplemente llame al método de dibujo para cada objeto. Solo necesita saber que es un Drawable.
fuente
Abstracción
Brindar los servicios necesarios ocultando las cosas innecesarias. Vea mi explicación aquí: ¿Qué es la abstracción?
fuente
Es algo exitoso porque alienta el uso de la organización de las cosas de la mente humana en objetos. Las personas generalmente son buenas para ver las relaciones de las cosas, como las diferencias, las similitudes y el comportamiento. OO alienta el desarrollo de software para imitar la conceptualización humana del mundo.
Hacer que el desarrollo de software sea similar a cómo vemos el mundo hace que sea más fácil para nuestras mentes manejar la complejidad.
fuente
Se ha preguntado " ADT vs objetos " varias veces aquí. La respuesta de una línea es "los ADT y los objetos son inversos entre sí: lo que uno resume claramente que el otro no puede; cada uno permite flexibilidad de diferentes maneras".
Para una respuesta más larga, vea William Cook's On Understanding Data Abstraction, Revisited . Brevemente, los objetos le permiten usar fácilmente múltiples implementaciones / representaciones de algún dato (algo que parece una lista podría ser una matriz, o un árbol de auto-equilibrio, o ...) pero dificulta la adición de nuevas operaciones (porque tiene que agregar esa nueva operación a cada una de sus representaciones), mientras que los ADT facilitan agregar nuevas operaciones en su tipo de datos, pero dificultan tener múltiples implementaciones.
Editar: había dicho que pasar el mensaje fue lo que hizo que OO tuviera éxito. Según el comentario de Jonas, eso no está bien, porque la mayoría de los idiomas que las personas consideran OO no usan la transmisión de mensajes. Como no está bien, lo descarté de mi respuesta.
fuente
Mis tres características principales. Composición de objetos: permite que los objetos colaboren. Polimorfismo: admite comportamientos dinámicos en tiempo de ejecución. Herencia: reutilizando el código y modificando el comportamiento mediante la anulación de métodos.
ADT: puede tener eso incluso en lenguajes no orientados a objetos como Pascal. Una pila o una cola son ejemplos de ADT.
fuente
en palabras simples, OOP es la clave para la reutilización y la encapsulación que da como resultado la producción de grandes marcos que hacen la vida más fácil para los programadores en esta era, ya que solo pueden llamar a las API y hacer lo que el día quiere con mayor frecuencia.
ya que su pregunta es sobre las 4 características de OOP para que pueda decir
entonces 1. La transmisión de mensajes y 3. El polimorfismo son en realidad compatibles 2. Herencia y 4. Encapsulación.
fuente
En mi opinión, las últimas tres características son las más importantes una vez que afectaron el uso generalizado de OOP:
Editar: Otro punto sería IDE y entornos de desarrollo de interfaz gráfica como Visual Studio y Eclipse. A medida que adoptan los lenguajes OOP, cada vez más diseños tienden a OOP.
Y, por supuesto, los Principios SÓLIDOS son los únicos que hacen que los productos de software ROCK sean sólidos entregables :)
fuente