Introducción a la Programación Orientada a Objetos (POO/OOP)
La Programación Orientada a Objetos (POO) busca amoldarse al modo de pensar del ser humano y no al de la máquina. Esto es posible gracias a la forma racional con la que se manejan las abstracciones que representan las entidades del dominio del problema y a propiedades como la jerarquía o el encapsulamiento.
Fases del Ciclo de Vida del Software
El desarrollo de software, aunque no exclusivo de la POO, sigue un ciclo de vida con fases clave y sus porcentajes de esfuerzo asociados:
- Análisis: 6%
- Diseño: 5%
- Implementación: 7%
- Depuración: 15%
- Mantenimiento: 67%
Factores de Calidad del Software
La calidad del software es un pilar fundamental en la ingeniería de sistemas. Algunos factores clave incluyen:
- Eficiencia
- Portabilidad
- Verificabilidad
- Integridad (protección contra procesos sin derecho de acceso)
- Facilidad de uso
- Robustez (manejo de situaciones anómalas)
- Extensibilidad
- Reutilización
- Compatibilidad
Conceptos Fundamentales de la POO
Abstracción en Programación
La abstracción es la capacidad para encapsular y aislar la información del diseño y ejecución.
Mecanismos en Programación
Para lograr la abstracción y otras propiedades, se utilizan diversos mecanismos:
- Procedimientos y funciones
- Tipos de datos abstractos (TDA)
Objetos
Los objetos son Tipos de Datos Abstractos (TDA) a los que se añaden mecanismos como la herencia, los métodos, etc.
Un objeto es la representación de un concepto para un programa, y contiene la información necesaria para abstraer dicho concepto:
- Los datos que describen su estado.
- Las operaciones que pueden modificar dicho estado y determinan las capacidades del objeto.
Un objeto es un «trocito» de programa. Un programa es un conjunto de objetos. Se programan cosas que pueden ser muy complejas y, para mantener esa complejidad bajo control, hay que partir el problema en piezas controlables.
¿Los objetos de programación son objetos materiales?
Los objetos de programación NO son objetos materiales. Inicialmente, los objetos se inventaron para estructurar programas de simulación de flujo vial: un auto, un peatón, una calle, un semáforo. Actualmente, se usan para estructurar objetos materiales, servicios, conceptos, en general, cualquier abstracción mental.
Ejemplos de abstracciones que pueden ser objetos:
- Una estructura algebraica (ej. un grupo)
- Un ámbito de trabajo (ej. colores)
- Un objeto material (ej. un satélite)
- Un servicio inmaterial (ej. www)
- Algo muy “real”: una cuenta corriente
Habitualmente, un programa emplea muchos objetos de la misma clase: muchos coches, muchos satélites, muchas conexiones www, muchos transistores.
Ventajas de Uso de la Programación Orientada a Objetos (Primera Mención)
Las ventajas de uso de la Programación Orientada a Objetos incluyen:
- Reusabilidad (mecanismos de abstracción y herencia).
- En programación convencional: uso de funciones y procedimientos.
- Adecuación a entornos de bases de datos.
- Idónea para tratamiento de Interfaces de Usuario.
- Adecuada en prototipos y simulación.
Características de la Programación Orientada a Objetos (POO)
I. El Modelo Objeto (Booch, Object-Oriented Analysis and Design with Applications, 1994)
- Abstracción: Las características esenciales del objeto. Ejemplo: Documento (insertar, borrar).
- Encapsulamiento (ocultamiento de información): Una clase contiene una interfaz pública y una implementación.
II. Modularidad
La modularidad es la subdivisión de una aplicación en otras más pequeñas (módulos). Un módulo es un conjunto de clases. Ejemplos: Editor, Fuente, Documento.
III. Jerarquía
La jerarquía es el ordenamiento de las abstracciones. Tipos: Herencia, Agregación.
IV. Polimorfismo
El polimorfismo es una misma operación (método) realizada de diferente modo. Ejemplos: Documento (añadir texto, imagen), Mensaje (añadir destinatario).
Otras propiedades importantes en POO:
- Concurrencia (multitarea)
- Persistencia (guardar estado)
- Uso de Excepciones (manejo de errores)
Lenguajes de Programación Orientada a Objetos
Cronología Resumida de Lenguajes de Programación
- Fortran (1958)
- LISP (1959)
- BASIC (1964)
- Pascal (1969)
- Prolog (1971)
- C++ (1986)
- Object Pascal (1988)
- CLOS (1989)
- Java (1995)
Hitos Importantes en Lenguajes POO
- The Journal of Object-Oriented Programming (1988)
- Primeros lenguajes POO:
- Simula-67
- Smalltalk-80 (considerado el verdadero primer lenguaje de POO)
Otros Aspectos de la POO
Beneficios Adicionales
- Mejor mantenimiento del software.
- Estructuras más reales de la información.
- Escalabilidad.
- Adaptabilidad.
Inconvenientes
- Necesidades de estandarización (ej. OMG – Object Management Group).
- Coste de conversión de software legado (legacy).
Conceptos Clave de la POO
Conceptos principales:
- Clase
- Objeto (una instancia de una clase)
- Jerarquía de herencia entre clases
- Ejecución de métodos
Un método es un algoritmo que se puede ejecutar a partir de un objeto. Se establece mediante la definición de subclases, que dan lugar a una jerarquía de clases.
La herencia representa el concepto de “ser un tipo especial de” o “ser un/a”.
Ventajas del Uso de la POO (Segunda Mención)
La Programación Orientada a Objetos ofrece múltiples beneficios en el desarrollo de software:
- Adecuada en prototipos y simulación.
- Reusabilidad (mecanismos de abstracción y herencia).
- En programación convencional: uso de funciones y procedimientos.
- Adecuada para entornos de bases de datos y en sistemas Cliente/Servidor.
- Idónea para tratamiento de Interfaces de Usuario.
Tipos de Datos Primitivos (Contexto C)
En el lenguaje C, existen tres tipos de datos básicos que son el int, float y char. A partir de estos tipos se crean otros que funcionan igual pero que difieren en el tamaño, como el long, el double, y otros. Estos, que son parte del lenguaje, se consideran como tipos «primitivos».
