Programación Orientada a Objetos y Programación Lógica: Conceptos Clave
Clasificado en Informática
Escrito el en español con un tamaño de 3,72 KB
1. Encapsulamiento en POO
El encapsulamiento en la Programación Orientada a Objetos (POO) oculta el estado interno de un objeto. Solo se modifica a través de los métodos que el objeto entiende, protegiendo la integridad de los datos y evitando accesos indebidos.
2. Herencia en Smalltalk vs. C++
Smalltalk
En Smalltalk, la herencia de estructura es total. Un objeto hereda todos los atributos de su superclase sin restricciones.
C++
En C++, la herencia de atributos es selectiva. Se heredan los miembros públicos y protegidos, pero no los privados. Además, algunas funciones miembro, como los constructores, no se heredan automáticamente.
3. Ordenar una Colección
Para ordenar col = (6, 12, 1, 9, 7)
de mayor a menor en Smalltalk, usa sort:
con un bloque de comparación:
col := #(6 12 1 9 7).
sortedCol := col asSortedCollection: [:a :b | a > b].
Resultado: #(12 9 7 6 1)
.
4. Métodos vs. Mensajes
Un mensaje es una solicitud de ejecución enviada a un objeto. Contiene el nombre del método y, opcionalmente, argumentos.
Un método es la implementación que responde al mensaje. Define qué ocurre cuando un objeto recibe un mensaje.
5. Ventajas de la Programación Funcional
La principal ventaja de la Programación Funcional sobre el Paradigma Imperativo es la transparencia referencial y la ausencia de efectos secundarios. Las funciones siempre producen el mismo resultado con las mismas entradas, sin modificar el estado global. Esto facilita:
- Depuración y pruebas: Es más fácil razonar sobre el comportamiento del programa.
- Paralelismo: Las funciones se ejecuten en paralelo sin conflictos.
- Modularidad: Las funciones son bloques autónomos, fáciles de reutilizar y componer.
6. Tipos Genéricos en Programación Funcional
Los tipos genéricos permiten escribir funciones o estructuras de datos que operan sobre cualquier tipo de dato. En Haskell, se representan con variables de tipo:
firstElement :: [a] -> a
firstElement (x:_) = x
Aquí, a
es un tipo genérico. firstElement
opera con listas de cualquier tipo.
7. Función con Análisis por Casos
Ejemplo en Haskell (cálculo del valor absoluto):
absoluto :: Int -> Int
absoluto x
| x < 0 = -x
| otherwise = x
8. Base de Conocimiento en Programación Lógica
Una base de conocimiento se forma con hechos y reglas que describen relaciones entre entidades:
Componentes
- Hechos: Enunciados verdaderos. Ejemplo:
hombre(juan).
- Reglas: Deducciones con cabeza (lo que se demuestra) y cuerpo (condiciones). Ejemplo:
mortal(X) :- humano(X).
- Consultas: Preguntas a la base. Ejemplo:
?- mortal(juan).
9. Respuestas "Yes" del Motor de Inferencias
El motor de inferencias responde "Yes" al demostrar que una consulta es verdadera usando los hechos y reglas.
Ejemplo
Hechos y reglas:
hombre(juan).
hombre(pedro).
mortal(X) :- humano(X).
humano(X) :- hombre(X).
Consulta: ?- mortal(juan).
Respuesta: Yes (deducible de los hechos y reglas).
10. Ejemplo de Hecho y Regla
Hecho: gato(michi).
Regla: animal(X) :- gato(X).
Consulta: ?- animal(michi).
Respuesta: Yes.