16-Programacion Orientada A Objetos-2023
16-Programacion Orientada A Objetos-2023
16-Programacion Orientada A Objetos-2023
Programming
Programación Orientada a Objetos en C
Programming
Programación en Lenguaje C - Programación Orientada a Objetos
Programación Estructurada
La programación estructurada es una forma disciplinada de desarrollo de software que enfatiza dos aspectos
separados y distintos: funciones o procedimientos y la estructuración de datos.
La programación orientada a objetos se basa en un paradigma ortogonal. En lugar de tener dos taxonomías
separadas, la programación orientada a objetos tiene una única basada en la noción de clase.
Programming
Programación en Lenguaje C - Programación Orientada a Objetos
Lenguaje C
El lenguaje C es claramente un lenguaje estructurado. C es, por mucho, el lenguaje más común para la creación de
sistemas embebidos. Tiene todas las asignaciones: funciones, variables, etc.
¿debería hacerse?
Programming
Programación en Lenguaje C - Programación Orientada a Objetos
Programming
Programación en Lenguaje C - Clases
Clases
Programming
Programación en Lenguaje C - Clases
Clases
Una clase no es más que una estructura en C, pero lo que tiene de especial es que contiene dos tipos diferentes de
características: datos (atributos) y comportamientos (operaciones).
La manera más simple de implementar clases en C (sin estructuras) es simplemente utilizar los archivos como
límite de encapsulación; las variables y funciones públicas se pueden hacer visibles en el archivo de encabezado,
mientras que el archivo de implementación contiene los cuerpos de las funciones y las variables y funciones
privadas.
Programming
Programación en Lenguaje C - Clases
.h sensor.h
Clases Atributos y
métodos int getVal(void);
públicos int init(void);
#include ”sensor.h”
.c sensor.c
int main(void)
{ #include ”sensor.h”
int x = getVal(); int w,y,z;
}
int getVal(void){…}
Atributos int init(void){…}
privados
Programming
Programación en Lenguaje C - Clases
Un enfoque más elegante utiliza estructuras dentro de los archivos para representar las clases. Las operaciones de
la clase se definen como funciones ubicadas dentro del mismo archivo que la estructura.
Programming
Programación en Lenguaje C - Objetos
Objetos
Programming
Programación en Lenguaje C - Objetos
Objetos
En Programación Orientada a Objetos, los objetos son instancias de clases. Podemos declarar un objeto como una
simple variable de algún tipo de dato ordinario como int. Pero como bien comentamos, en C, las clases se
representan mejor como estructuras; por lo que crear un objeto instanciado a estructura puede ser mejor
representación.
Siempre que hablamos de objetos también hablamos de su tipo. Por lo que nuevamente el tema de tipo de dato
sale a la luz.
Programming
Programación en Lenguaje C - Objetos
Normalmente en el mundo de lenguajes estructurados como C, estamos acostumbrados a que las únicas
propiedades que proporciona un tipo de dato a una variable u objeto son:
Programming
Programación en Lenguaje C - Objetos
Por ejemplo para un microcontrolador típico de 8-bit y 16-bit un int tiene las siguientes propiedades:
Lo que un tipo puede hacer es tan importante como lo que no puede hacer, por ejemplo un int no puede:
Programming
Programación en Lenguaje C - Objetos
Programming
Programación en Lenguaje C - Clases
Práctica de Laboratorio:
LAB-POO-clases: El objetivo de esta práctica de laboratorio es estudiar la implementación de clases y objetos en
C. Crear 2 clases: perro y gato con propiedades y métodos.
Programming
Programación en Lenguaje C - Herencia
Herencia
Programming
Programación en Lenguaje C - Herencia
Herencia
El término herencia (inheritance) también se conoce como subclasificación (subclassing) y en el mundo del
modelado en ocasiones se le da el término de generalización (generalization).
La herencia permite que una clase (clase hija) herede las característica de una clase más general (clase padre), es
decir, todas las características de la clase padre (también conocida como clase base o principal) también son
características de la clase hija (también conocida como clase derivada o secundaria), pero a esta última se le
permite tanto especializarse como extender la clase padre.
Programming
Programación en Lenguaje C - Herencia
Ventajas de la Herencia
Una de las ventajas de la herencia es la capacidad de reutilizar el diseño y el código. Si diseñó una clase para un
contexto específico y quiero reutilizarla más tarde en un contexto diferente, puedo simplemente diseñar y
codificar las especializaciones y extensiones sin tocar la clase base.
La subclase puede redefinir las operaciones proporcionadas por la clase base. Debido a que una subclase es una
forma especializada de una clase base, cualquier operación que tenga sentido para una instancia de la clase base
también debería tener sentido con una instancia de la clase derivada.
Programming
Programación en Lenguaje C - Herencia
.c perro.c
.h animal.h
typedef struct
{
//perro hereda de animal typedef struct
animal_t animal; {
char *tipoLadrido; int id;
}perro_t; unsigned char nombre[10];
int edad;
}animal_t; //clase padre
.c gato.c
typedef struct
{
//gato hereda de animal La herencia se puede llevar a cabo en C a
animal_t animal;
través de estructuras anidadas.
char *tipoMaullido;
}gato_t;
Programming
Programación en Lenguaje C - Herencia
Práctica de Laboratorio:
Programming
Programación en Lenguaje C – Polimorfismo
Polimorfismo
Programming
Programación en Lenguaje C – Polimorfismo
El polimorfismo es una característica valiosa de los lenguajes orientados a objetos. Permite que el mismo nombre
de función represente una función en un contexto y otra función en un contexto diferente. En la práctica, esto
significa que cuando cambia el contexto estático o dinámico de un elemento, se puede llamar a la operación
apropiada. Las funciones con esta característica se llaman funciones virtuales.
Entonces podemos decir que las funciones virtuales (también conocidas como funciones abstractas), son
funciones de una clase (o también de una interfaz en Java) que no tienen implementación o de definición, es decir,
sólo tienen declaración.
La implementación o definición de una función virtual será definida en una subclase que hereda de la clase base
donde se declaró la función virtual.
Programming
Programación en Lenguaje C – Polimorfismo
Por supuesto, la forma estándar de hacer esto en C es usar declaraciones condicionales como if o switch. El
problema con el enfoque estándar es que rápidamente se vuelve difícil de manejar cuando hay muchos contextos
diferentes disponibles.
Además, el enfoque requiere que se conozcan todos los contextos posibles cuando se escribe la función original, o
al menos la función debe modificarse para permitir un nuevo contexto. Con funciones polimórficas, no se requiere
presciencia. Cuando se descubre el nuevo contexto, la función polimórfica se puede crear y agregar sin requerir
cambios en la función original.
Programming
Programación en Lenguaje C – Polimorfismo y Clases Abstractas
Clases abstractas
En lenguajes orientados a objetos, una clase abstracta tiene las siguientes características
Programming
Programación en Lenguaje C - Polimorfismo y Clases Abstractas
Funciones virtuales
Clase abstracta
Programming
Programación en Lenguaje C - Polimorfismo y Clases Abstractas
.c interfaz_animal.c .h animal.h
typedef enum
const animal_t animal[] = { {
{ PERRO,
.comer = perro_comer, GATO
}TIPO_ANIMAL;
.guardarId = perro_guardarId,
.obtenerId = perro_obtenerId, typedef union
.emitir_sonido.ladrar = ladrar {
}, void(*ladrar) (void);
void(*maullar)(void);
{
}emitir_sonido_t;
.comer = gato_comer,
.guardarId = gato_guardarId, typedef struct //clase abstracta
.obtenerId = gato_obtenerId, {
.emitir_sonido.maullar = maullar int id;
unsigned char nombre[10];
} int edad;
void (*comer)(void);
}; void (*guardarId)(int id);
int (*obtenerId)(void);
emitir_sonido_t emitir_sonido;
}animal_t;
extern const animal_t animal[];
Programming
Programación en Lenguaje C - Polimorfismo y Clases Abstractas
.c main.c
animal[PERRO].comer();
animal[PERRO].guardarId(55);
animal[PERRO].emitir_sonido.ladrar();
Funciones virtuales
(Reutilización de funciones en
animal[GATO].comer();
animal[GATO].guardarId(56); diferentes contextos)
animal[GATO].emitir_sonido.maullar();
Programming
Programación en Lenguaje C - Polimorfismo y Clases Abstractas
Práctica de Laboratorio:
Programming