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.

Entradas relacionadas: