Introducción a la Programación Orientada a Objetos y Paradigmas de Programación
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 13,68 KB
1. El Proceso de Abstracción
Paradigmas de programación:
- Imperativa: Pascal, C, Ada
- Orientada a objetos: Smalltalk, Java, Python, C++
- Funcional: Lisp, Haskell
- Lógica: Prolog
La Programación Orientada a Objetos (POO) busca manejar la complejidad mediante la abstracción, encapsulando conocimiento en objetos.
Cada objeto tiene un estado (representado por atributos) y comportamiento (métodos que operan sobre el estado).
2. Objetos: Estado, Comportamiento y Composición
- Ejemplo: Un perro tiene estado (nombre, raza) y comportamiento (ladrar, jugar).
- Los objetos pueden ser abstractos, como Cuentas bancarias o Bibliotecas.
- La composición permite formar objetos complejos a partir de otros más simples (por ejemplo, un curso formado por varios alumnos)
3. Clases e Instancias
- Una clase es un modelo que define objetos con características y comportamientos comunes.
- Ejemplo: La clase Persona define atributos (nombre, estatura) y comportamientos (caminar, correr).
- Una instancia es un objeto específico de una clase (por ejemplo, Silvia es una instancia de Cliente).
4. Mensajes y Métodos
- Los objetos interactúan enviándose mensajes para ejecutar acciones mediante métodos.
- Ejemplo: Un alumno podría recibir el mensaje
verNombre()
para consultar su nombre. - Un mensaje desencadena la ejecución de un método específico.
5. Encapsulamiento y Ocultamiento de Información
Encapsulamiento: Las clases encapsulan los datos y métodos privados.
Ocultamiento de información: Los datos internos solo pueden modificarse mediante la interfaz pública de la clase.
6. Herencia, Polimorfismo y Binding Dinámico
Herencia: Permite crear nuevas clases a partir de otras, reutilizando atributos y comportamientos.
Polimorfismo: Diferentes objetos pueden interpretar el mismo mensaje de manera distinta (por ejemplo, extraer()
en CajaDeAhorro y CuentaCorriente).
Binding dinámico: La asociación entre un mensaje y el método que lo ejecuta se realiza en tiempo de ejecución.
7. Características de Smalltalk
- Es considerado uno de los primeros lenguajes orientados a objetos (Simula fue el primero).
- Ha influido en lenguajes como Java y Ruby.
- Introdujo prácticas clave en metodologías ágiles: refactorización, desarrollo incremental, TDD.
- Es un lenguaje reflexivo con tipado dinámico y todas las entidades son objetos.
- Smalltalk es un ambiente de desarrollo completo, no solo un lenguaje.
Ejemplos de entornos: Smalltalk Express, Pharo, Squeak, VisualWorks, Dolphin.
8. Mensajes
Un mensaje tiene tres componentes: receptor, selector y argumentos.
Tipos de mensajes:
- Unarios: Sin argumentos (ej.:
5 factorial
). - Binarios: Con un argumento, usados en operaciones lógicas y matemáticas (ej.:
3 < 5
). - De palabra clave: Con múltiples argumentos, identificados por
:
(ej.:#(4 3 8 1) at: 4 put: 2
).
Orden de ejecución de los mensajes:
- Expresiones entre paréntesis.
- Expresiones unarias.
- Expresiones binarias.
- Expresiones de palabra clave.
Ejemplos de polimorfismo:
(1/5) + (5/3)
→ Retorna (28/15)
.
(200 @ 200) + 100
→ Retorna (300@300)
.
9. Variable y Asignación
Asignación: var := expresión
.
Smalltalk utiliza binding dinámico: una variable puede apuntar a objetos de diferentes clases durante la ejecución.
Existen variables de instancia (propias de cada objeto), de clase (comunes a todos los objetos de una clase), temporales (locales a métodos), y argumentos (parámetros de métodos).
10. Estructuras de Control
Smalltalk no tiene estructuras de control tradicionales; se simulan mediante objetos y mensajes.
Selección condicional:
(a < b) ifTrue: [a := a + 1] ifFalse: [a := b * 2]
.
Repetición condicional:
[i <= 10] whileTrue: [suma := suma + i. i := i + 1]
.
Repetición de longitud fija:
1 to: 10 do: [:i | suma := suma + i]
.
11. Jerarquía de Clases (Class Hierarchy Browser)
Las clases están organizadas jerárquicamente, con Object como raíz. Ejemplos:
- Char: Los caracteres se representan con
$
(ej.:$a
,$+
). - String: Secuencia de caracteres entre comillas simples (ej.:
'hola'
). - Number: Clase que encapsula
Integer
,Float
yFraction
.
12. Definiciones de Clases Simples
Diseño de una clase nueva:
- Protocolo de clase: Describe los métodos para crear objetos y manipular variables de clase.
- Protocolo de instancia: Describe los métodos para manipular las variables de instancia de un objeto.
- Variables de clase: Compartidas por todas las instancias de una clase.
- Variables de instancia: Denotan el estado interno y privado de una instancia.
13. Diagrama de Clases
Descripción:
Representa los tipos de objetos del sistema y las relaciones estáticas entre ellos.
Incluye atributos y operaciones de las clases, así como restricciones entre ellas.
Estructura:
- Sección superior: Nombre de la clase
- Sección central: Atributos
- Sección inferior: Operaciones (métodos)
Ejemplo:
Perro
▪ nombre
▪ raza
▪ colorPelo
• come()
• guardaHueso()
• marcaTerritorio()
Tipos de relaciones entre clases:
- Asociación: Conexión estructural entre objetos.
- Agregación y Composición:
- Agregación: Las partes pueden existir independientemente del todo.
- Composición: Las partes solo existen asociadas al todo.
- Herencia: La subclase hereda funcionalidades de la superclase (generalización).
14. Diagramas de Secuencias
Los diagramas de secuencias modelan cómo colaboran grupos de objetos para llevar a cabo un comportamiento.
Cada objeto se representa como una caja con una línea de vida vertical.
Los mensajes se representan como flechas entre las líneas de vida.
Condiciones y marcadores de iteración
15. Jerarquías de Clases
En POO, un programa se concibe como una red de objetos que interactúan mediante mensajes.
La herencia permite definir una jerarquía de clases donde las subclases heredan atributos y métodos de las superclases.
Las jerarquías pueden incluir clases genéricas (abstractas) y concretas.
16. Mecanismo de Herencia en POO
La herencia permite crear nuevas clases basadas en clases existentes.
Generalización: Agrupar clases en una superclase.
Especialización: Añadir comportamiento mediante nuevas subclases.
Tipos de herencia:
- Herencia de estructura: Las subclases heredan todos los atributos.
- Herencia de comportamiento: Las subclases pueden redefinir métodos.
Ventajas de la herencia:
Menos código y mejor mantenimiento.
Uso de pseudovariables:
self
: Referencia al objeto receptor del mensaje.super
: Referencia a la superclase inmediata.
17. C++: Características Generales
Lenguaje compilativo híbrido.
Cada programa en C++ está compuesto por objetos.
Todo objeto tiene:
- Estado: Representado por sus datos miembro.
- Comportamiento: Definido por sus funciones miembro.
Cada objeto es una instancia de una clase, que encapsula estado y comportamiento.
Definición de clases
Contienen datos miembro y funciones miembro.
Visibilidad: Las clases pueden ser privadas, públicas o protegidas.
Herencia simple y múltiple:
La subclase hereda datos y funciones miembro de la superclase, pero no hereda el constructor ni el destructor.
Se debe especificar el tipo de derivación: pública, protegida o privada.
18. Definición de Clases en Python
Se utiliza la palabra clave class
.
Los nombres de clase comienzan por mayúscula por convención.
19. Funciones Especiales: Constructores y Destructores
Constructor:
- Se llama igual que la clase.
- Se invoca automáticamente al crear el objeto.
- Admite parámetros, pero no devuelve valores.
Destructor:
- Se llama usando el nombre de la clase precedido por
~
. - No admite parámetros ni devuelve valores.
20. Características del Paradigma Funcional
Un programa se compone de definiciones de funciones o ecuaciones matemáticas.
El sistema operativo evalúa las funciones y devuelve un resultado, como una calculadora.
Paradigma declarativo: Describe qué hacer, sin indicar cómo ni en qué orden.
Las variables representan valores matemáticos y no cambian durante la ejecución.
Propiedades principales:
Transparencia referencial:
La evaluación de una función con un argumento dado siempre retorna el mismo resultado.
No hay efectos laterales que alteren el valor final.
21. Definición de Funciones
Estructura de una Función
- Tipo de la función: Especifica el dominio y codominio.
- Ecuación: Define el comportamiento.
Tipos de Datos
- Estándar:
num
,bool
,char
, α. - Derivados:
- Par ordenado: (num, char).
- Listas:
[ ]
,[X]
,[X:Xs]
.
22. Evaluación de Funciones
Existen dos órdenes de evaluación:
- Orden aplicativo: Primero se simplifican los argumentos.
- Orden normal: Primero se evalúa la función.
23. Características del Paradigma Lógico
En este paradigma se trabaja de forma descriptiva:
El programa no indica cómo resolver el problema, sino que establece relaciones entre las entidades del mismo.
Se encuadra en la programación declarativa.
Un programa lógico no tiene un algoritmo que indique los pasos, sino que contiene expresiones lógicas que describen la solución.
Elementos clave:
Se utilizan reglas lógicas (predicados de primer orden) para inferir conclusiones a partir de datos.
Un programa lógico se compone de:
- Base de conocimiento
- Consultas
- Motor de inferencias que aplica deducción para obtener conclusiones.
24. Base de Conocimiento
Está formada por hechos y reglas:
- Hechos: Representan relaciones siempre verdaderas (ej.:
hombre(juan).
). - Reglas: Relacionan hechos y permiten deducir objetivos.
25. Consultas
Una consulta es un objetivo que se demuestra comparando con la base de conocimiento.
Puede ser de validación (respuesta: Sí o No) o búsqueda (retorna los valores que satisfacen el objetivo).
26. Motor de Inferencias
Controla la ejecución del programa lógico a partir de una consulta.
Usa recursión y backtracking:
Si un camino de demostración falla, retrocede y prueba otros caminos hasta agotarlos.