Guía Exhaustiva de Programación Orientada a Objetos, Diccionarios y Archivos en Python

Módulo III: Programación Orientada a Objetos (POO) en Python

  • La Programación Orientada a Objetos (POO) se define como un paradigma de programación que permite el desarrollo de aplicaciones mediante el uso de objetos que representan elementos del mundo real.
  • A diferencia de la programación tradicional, la cual organiza el software a través de funciones y procedimientos, la POO se estructura en torno a clases y objetos.
  • Este enfoque tiene como fin facilitar la creación de programas más organizados, que permitan la reutilización de código y que resulten fáciles de mantener.
Los Cuatro Pilares de la POO

La Programación Orientada a Objetos se sustenta sobre cuatro fundamentos principales:

  1. Clases y Objetos.
  2. Herencia.
  3. Abstracción.
  4. Polimorfismo.
  • Python destaca por ser un lenguaje que permite la implementación de estos pilares de manera sencilla y eficiente.
Ventajas de la POO
  • Fomenta la reutilización de fragmentos de código.
  • Simplifica las tareas de mantenimiento de las aplicaciones.
  • Optimiza la organización estructural del programa.
  • Reduce significativamente la duplicación de código.
  • Es ideal para la gestión y trabajo en proyectos de gran envergadura.
  • Ofrece una forma de representar situaciones reales mediante objetos de software.

3.3.1 Clases y Objetos

¿Qué es una Clase?
  • Se define como una plantilla, modelo o plano que establece las características y comportamientos que poseerán los objetos creados a partir de ella.
  • Metáfora: Se puede imaginar como el plano de una casa; el plano contiene la información necesaria para la construcción, pero no es la casa física en sí.
Componentes de una Clase
  • Atributos: Representan las características o propiedades intrínsecas de un objeto. Ejemplos citados:
    • Nombre.
    • Edad.
    • Color.
    • Precio.
    • Marca.
  • Métodos: Son las acciones o funciones que el objeto es capaz de realizar. Ejemplos citados:
    • Encender()
    • Apagar()
    • Calcular()
    • MostrarDatos()
Sintaxis y Constructor
  • Sintaxis Básica: Se emplea la palabra reservada class. Ejemplo: class Estudiante: pass.
  • El Constructor (init): Es un método especial que se autoejecuta al crear un objeto. Su función primordial es inicializar los atributos.
  • Sintaxis del Constructor:
    • class Estudiante:
    • def __init__(self, nombre, edad):
    • self.nombre = nombre
    • self.edad = edad
¿Qué es un Objeto?
  • Un objeto es una instancia concreta de una clase. Siguiendo la analogía: si la clase es el molde, el objeto es el producto final.
  • Ejemplo de instanciación:
    • Código: est1 = Estudiante("Carlos", 20)
    • Al ejecutar print(est1.nombre), el resultado es Carlos.
Relación Clase-Objeto (Ejemplos)
  • Clase: Vehículo -> Objeto: Toyota Corolla.
  • Clase: Estudiante -> Objeto: Ana.
  • Clase: Libro -> Objeto: Matemática Básica.
  • Clase: Computadora -> Objeto: Laptop Dell.
Métodos en la Clase
  • Son funciones definidas dentro del cuerpo de la clase.
  • Ejemplo:
    • class Persona:
    • def saludar(self):
    • print("Hola, bienvenido")
  • Uso: p1 = Persona(), seguido de p1.saludar().

3.3.2 Herencia

Definición de Herencia
  • Es el mecanismo que permite generar nuevas clases partiendo de clases ya existentes. La nueva clase adquiere automáticamente los atributos y métodos de la clase original, lo que promueve la reutilización y evita redundancias.
Tipos de Clase en Herencia
  • Clase Padre: Es la clase base que suministra los métodos y atributos originales.
  • Clase Hija: Es la clase nueva que hereda las propiedades de la clase padre.
Ejemplo Completo de Herencia
  • class Persona:
    • def saludar(self): print("Hola")
  • class Estudiante(Persona):
    • pass
  • Resultado: Si se crea e1 = Estudiante() y se llama a e1.saludar(), la salida será Hola.
Ventajas de la Herencia
  • Reutilización exhaustiva de código previo.
  • Reducción del tiempo dedicado al desarrollo.
  • Estructura y organización superior.
  • Facilidad en el mantenimiento correctivo y evolutivo.

3.3.3 Abstracción

Concepto de Abstracción
  • Consiste en exponer solamente la información y funcionalidades relevantes para el usuario, ocultando los procesos y detalles internos complejos. El fin es simplificar la interacción con el sistema.
Ejemplos de Abstracción
  • Vida Real (Cajero Automático): El usuario solo interactúa con la interfaz (insertar tarjeta, digitar clave, elegir opción) sin necesidad de comprender el funcionamiento interno del sistema bancario.
  • Programación: En una clase CuentaBancaria, el usuario ejecuta cuenta.depositar() sin preocuparse por la lógica de base de datos o validaciones internas.
Beneficios
  • Mitiga la complejidad del software.
  • Hace que el sistema sea más intuitivo.
  • Incrementa la seguridad al proteger detalles sensibles.
  • Oculta implementaciones innecesarias para el uso externo.

3.3.4 Polimorfismo

Definición de Polimorfismo
  • El término proviene del griego y significa "múltiples formas".
  • En POO, permite que distintos objetos respondan de manera diversa a la invocación de un mismo método.
Ejemplo Práctico
  • Clase Perro: def sonido(self): print("Guau").
  • Clase Gato: def sonido(self): print("Miau").
  • Implementación: Al iterar una lista con ambos objetos animales = [Perro(), Gato()] y llamar a animal.sonido(), cada uno emite su sonido característico (Guau y Miau respectivamente).
Ventajas
  • Aporta flexibilidad extrema a la lógica de programación.
  • Permite extender las aplicaciones de forma sencilla.
  • Minimiza la repetición de estructuras condicionales.
  • Optimiza la reutilización de nombres de métodos.

3.4 Diccionarios

Definición y Estructura
  • Un diccionario es una estructura de datos diseñada para almacenar información en pares de Clave (Key) y Valor (Value). La clave actúa como un índice rápido para recuperar su valor asociado.
  • Ejemplo: estudiante = {"nombre": "Ana", "edad": 20, "carrera": "Ingeniería de Sistemas"}.
Características
  • Se delimitan mediante llaves {}.
  • Cada elemento es un par Clave-Valor.
  • Las claves son obligatoriamente únicas dentro de un mismo diccionario.
  • Pueden contener diversos tipos de datos simultáneamente.
  • Son estructuras mutables (se pueden editar tras su creación).
Operaciones Básicas
  • Creación: persona = {"nombre": "Carlos", "edad": 25, "ciudad": "Panamá"}.
  • Diccionario Vacío: datos = {}.
  • Agregar Elementos: persona["telefono"] = "6000-0000".
  • Consultas: Se accede mediante diccionario["clave"]. Ejemplo: persona["nombre"] devuelve Carlos.
  • Método get(): Permite una recuperación segura; si la clave no existe, devuelve None en lugar de un error.
Recorrido de Diccionarios
  • Claves: for clave in persona: print(clave).
  • Valores: for valor in persona.values(): print(valor).
  • Clave y Valor: for clave, valor in persona.items(): print(clave, valor).
Métodos de Manipulación
  • keys(): Lista todas las claves.
  • values(): Lista todos los valores.
  • items(): Lista los pares clave-valor.
  • update(): Modifica valores de claves existentes. Ejemplo: persona.update({"edad": 30}).
  • pop(): Elimina una clave específica y su valor.
  • clear(): Vacía el diccionario por completo.
  • len(): Informa la cantidad total de elementos.

3.5 Archivos

Definición e Importancia
  • Un archivo es un conjunto de datos residentes en un dispositivo de almacenamiento de forma permanente.
  • Permiten que la información persista una vez que el programa finaliza, evitando la pérdida de datos guardados en variables volátiles.
  • Ventajas: Persistencia, intercambio de datos y recuperación posterior de información; esenciales para bases de datos.
Tipos de Archivos
  • Archivos de Texto: Contenido legible por humanos (Ej: .txt, .csv).
  • Archivos Binarios: Formatos internos para la computadora (Ej: imágenes, videos, aplicaciones).
Manejo de Archivos en Python (open)
  • La función central es open("nombre_archivo", "modo").
  • Modos de Apertura:
    • r: Lectura (Read).
    • w: Escritura (Write) - sobrescribe el contenido.
    • a: Agregar (Append) - añade al final.
    • x: Crear (Create) - falla si el archivo ya existe.
Operaciones de Lectura y Escritura
  • Lectura completa: archivo.read().
  • Lectura línea por línea: for linea in archivo: print(linea).
  • Escritura: archivo.write("Texto").
  • Cierre: Es fundamental usar archivo.close() para liberar recursos.
  • Ejemplo de escritura:
    • archivo = open("notas.txt", "w")
    • archivo.write("Juan - 85\n")
    • archivo.close()

Actividades y Evaluación

Actividad de Mapa Mental (POO)
  • Conceptos obligatorios: POO, Clases, Objetos, Métodos, Atributos, Herencia, Abstracción, Polimorfismo.
  • Requisitos: Colores, conectores, ejemplos breves y entrega en PDF.
  • Penalizaciones:
    • Entrega mañana (viernes): 20-20 puntos.
    • Entrega después del viernes 1919 de junio: 00 puntos.
Actividad de Diccionarios y Archivos
  • Parte I (Diccionarios): Explicar definiciones de clave, valor, métodos (keys, values, items, update, pop) y proveer un ejemplo propio.
  • Parte II (Archivos): Responder sobre importancia, tipos, función open, modos (r, w, a) y diferencia entre read/write y la necesidad de close.
  • Parte III (Análisis): Analizar un código que abre datos.txt en modo w, escribe el nombre de un estudiante y cierra el archivo.
Criterios de Evaluación Generale (Escala de 100100 puntos)
  • Comprensión de conceptos: Hasta 2525 puntos.
  • Identificación de elementos: 2020 puntos.
  • Organización y estructura: 2020 puntos.
  • Ejemplos y aplicaciones: 1515 puntos.
  • Creatividad, presentación y ortografía: 2020 puntos adicionales (1010 cada uno).