Fundamentos de Programación Orientada a Objetos y Gestión de Procesos

Clasificado en Informática

Escrito el en español con un tamaño de 4,6 KB

Programación Orientada a Objetos: Clases, Objetos y Herencia

Clases y Objetos

Clases y objetos: La clase se define como el tipo de los objetos (actuando como un molde) y define las características principales: atributos y métodos. Por su parte, el objeto es una instancia de dicha clase, la cual puede poseer distintos estados.

Herencia y Abstracción

  • Herencia: Es el mecanismo mediante el cual las clases hijas añaden o modifican las funcionalidades de sus clases padres.
  • Abstracción: Se considera el proceso inverso a la herencia. Consiste en identificar lo común a una serie de clases; es la forma habitual de pensar la estructura de clases. Es importante notar que de una clase abstracta no se pueden instanciar objetos.

Declaración de Herencia

La declaración de herencia permite ampliar o modificar una clase madre. Los tipos de acceso pueden ser:

  • Public: La más habitual.
  • Private: Poco utilizada.
  • Protected: Muy poco utilizada.

También existe la herencia múltiple, aunque es un concepto complejo. En cualquier caso, la clase hija hereda todos los atributos de la madre, pero solo puede acceder a aquellos definidos como public o protected.

Concurrencia y Paralelismo

Un proceso es la instancia de un programa en ejecución. La concurrencia ocurre cuando los procesos concurrentes solapan su ejecución, mientras que los procesos paralelos se ejecutan exactamente al mismo tiempo. Por tanto, la concurrencia se define como un paralelismo potencial donde los procesos compiten o colaboran entre sí.

Problemas Comunes y Propiedades

Dentro de la concurrencia surgen desafíos como:

  • Exclusión mutua: Se basa en la sección crítica (instrucciones que acceden a un recurso compartido). Solo debe haber un proceso en su sección crítica a la vez (ejemplos: una variable compartida o una impresora).
  • Sincronización: Los procesos deben acceder al recurso solo cuando este se encuentre en el estado adecuado, bloqueándolos si no es así. Ejemplo: el buffer, donde el consumidor actúa si el buffer no está vacío y el productor si no está lleno.

Propiedades de las Soluciones

Las soluciones implementadas deben cumplir con:

  1. Seguridad: Garantizar exclusión mutua, sincronización y ausencia de interbloqueo.
  2. Viveza: Evitar el interbloqueo activo (consumo de CPU sin producir), y evitar la inanición (postergación indefinida donde un proceso nunca accede al recurso, común al definir prioridades).

Gestión de Procesos en UNIX

Los procesos UNIX poseen un identificador único llamado PID y un identificador de proceso padre o PPID. El proceso Init es el primer proceso del sistema.

En este entorno, los hijos suelen morir antes que los padres y deben ser esperados por estos; en caso contrario, el proceso queda en estado zombi. Los procesos en UNIX no comparten memoria, solo ficheros abiertos. Su manejo principal incluye:

  • fork(): Creación de un proceso hijo.
  • wait(): Espera de un proceso hijo.
  • exec(): Reemplazo de un proceso.

Librería Pthread y el uso de Hilos

Los hilos son secuencias de ejecución independientes dentro de un proceso. Se consideran entidades ligeras debido a la diferencia en tiempos de creación:

  • Crear un proceso: 23.61 microsegundos.
  • Crear un hilo: 2.1 microsegundos.

Los hilos comparten memoria (variables globales y memoria dinámica mediante malloc), lo que permite gestionar la concurrencia más fácilmente.

Estándar POSIX Threads

Los POSIX threads, también conocidos como Pthreads, son el estándar de creación de hilos en sistemas UNIX. Para su uso, se debe incluir la librería <pthread.h>. Todas las funciones y variables asociadas empiezan con el prefijo pthread_. En la creación de hilos, el hilo generado ejecutará una función específica.

Entradas relacionadas: