3. Historia: OO
• OO (Orientación a Objetos): desarrollo y
modelización de software que facilita la
construcción de sistemas complejos a partir de
componentes.
• Se modela el mundo real tan fielmente como
sea posible.
• Al comparar la OO y las Tradicionales
(Procedimentales estructuradas) hay una
reducción de código como mínimo del 40%.
4. Historia: OO
• Las 4 Propiedades más fuertes de OO son:
– Abstracción: Vista externa del Objeto, con el fin de
separar el Acceso a los Objetos, de su
implementación interna.
– Encapsulación: Propiedad que asegura que el
contenido de la información de un objeto está oculto
al mundo exterior.
– Modularidad: Permite dividir una aplicación en
partes más pequeñas llamadas módulos, tan
independientes como sea posible.
– Jerarquía: Ordena la Abstracción con la Herencia.
5. Paradigma OO
Resultado de la evolución natural de la
programación, devenido en metodología de
programación de propósito general que simula la
forma en que el hombre trabaja y cuya idea básica
es que percibimos al mundo que nos rodea como
una variedad de objetos.
6. Desarrollo Tradicional Frente al OO
Tradicional OO
Diseño Descendente Ascendente
Lenguajes Estructurados OO
Se Centra en Operaciones Los Objetos Reales
Idea Descomponer Reflejar el mundo
Clave una Aplicación real mediante el
en programas ensamblado de
más pequeños clases
8. Conceptos básicos
Un Objeto es una entidad con una estructura de
datos interna bien definida, junto a un conjunto de
acciones que describen su comportamiento. Es la
unidad básica de la POO.
Ejemplo:
María la florista
Perla la florista
José el florista
9. Conceptos básicos
•Un objeto o instancia es una variable concreta de
una clase con su propia copia de variables miembros.
Un objeto tiene estado, comportamiento e identidad.
• Tiene datos internos que le dan el estado.
• Tiene métodos para producir comportamiento.
• Cada objeto tiene una dirección única en memoria lo
que le da identidad.
10. Conceptos básicos
Mensaje: Forma de solicitar una acción a un objeto.
Cliente Servidor
Mensaje
Emisor Receptor
Objeto, Objeto
Usuario,
Aplicación
11. Conceptos básicos
Una clase es:
• una categoría de objetos con características
comunes.
• una plantilla que se usa para crear múltiples objetos
con características similares.
Las clases engloban las características de un
conjunto particular de objetos.
Cuando se escribe un programa en un lenguaje
orientado a objetos no se definen objetos
individuales sino clases de objetos.
Ejemplo: Florista
12. Conceptos básicos
• Las clases son tipos de variables o tipos de datos
creados por el usuario.
• Se puede extender un lenguaje de programación
adicionando nuevos tipos de datos específicos
acorde a las necesidades del problema a resolver.
• Las clases pueden estar formadas por variables
miembros y funciones miembros.
13. Implementación
// En C++
class Circulo {
};
class TCirculo {
};
Buenas Prácticas:
• Nombrar las clases utilizando la notación Camell,
comenzando o no con la letra T para indicar que es
un tipo de datos.
• Colocar la apertura de ambiente en la misma línea
o en una línea aparte.
14. Implementación
// Sintaxis en C++
class <nombre de la clase>
{
private: [lista de miembros]
protected: [lista de miembros]
public: [lista de miembros]
};
15. Conceptos básicos
Cada clase puede estar compuesta por:
• Atributos: definen el estado de la clase.
• atributos pasivos,
• variables miembros,
• campos.
• Métodos: definen el comportamiento de la clase.
• funciones miembros,
• atributos activos,
• operaciones,
• comportamiento,
• responsabilidades.
16. Notación UML para
Ejemplos: representar una clase
Florista
Nombre
Variables Miembros Salario
Edad
Funciones miembros Vender flores
Enviar flores a otra ciudad
Bombillo
Consumo
Variables Miembros Enceder
Apagar
Funciones miembros Aumentar Brillo
Disminuir brillo
17. Atributos o variables miembros
Los atributos son características, propiedades que
hacen que un objeto se diferencie del otro. Pueden
determinar apariencia, cualidades, estado, etc.
Los atributos se definen por variables.
Para cada variable se define su tipo.
En C++ es posible definir:
• Variables o atributos de clase
• Variables o atributos de objeto o de instancia
19. Variables de clases
• Define un atributo para toda la clase.
• Aplica para la clase y para todas sus instancias.
• Sólo almacena una copia con independencia de la
cantidad de objetos.
• Existe aunque no se haya creado ningún objeto de
la clase.
• Debe ser definida como static.
20. Variables de objetos o de instancia
• Define un atributo de un objeto en particular.
• Cada instancia u objeto almacena su propia copia
de variables de objeto.
• Los atributos son por defecto de objetos o de
instancia a menos que se califiquen como static (de
clase).
21. Ejemplos
// en C++
class Circulo {
static int numCirculos = 0;
double x, y, r;
};
Las variables de clases son buenas para la
comunicación entre diferentes objetos de la clase o
para llevar un registro de información relativa a toda
la clase.
Ejemplo: el número total de círculos creados.
22. Ejemplos
// en C++
class Fecha {
int d;
int m;
int a;
static TDate defaultDate;
};
Buenas prácticas
Definir cada atributo en una línea independiente
aunque sean del mismo tipo.
Hace el código más legible y permite comentar mejor.
23. Métodos o funciones miembros
El comportamiento de una clase se implementa a
través de sus métodos o funciones miembros.
Una clase o un objeto puede llamar métodos de
otras clases para:
• Indicar a otro objeto que cambie
• Pedir a otro objeto que haga algo
Es posible definir:
• Métodos de instancia: aplican a cada objeto de la
clase.
24. Métodos de clase
• Están disponibles para cualquier instancia de la
clase y para otras clases.
• No se requiere una instancia de la clase para poder
invocar a un método de clase.
• Para definir los métodos de clase hay que
anteponer a la definición del método la cláusula
static.
25. Tipos de funciones miembros
• Funciones (procedimientos)
• Constructores
• Destructores
En C++ todas son funciones, no existen
procedimientos.
26. Definiendo métodos
• Cada objeto puede satisfacer sólo ciertos
requerimientos.
• Los requerimientos que puede resolver el objeto
están definidos por su interfaz y los tipos que hay en
ella.
• Cuando se hace un requerimiento a un objeto un
método es llamado.
27. Definiendo métodos
La definición básica de un método cuenta de:
• Tipo de retorno (tipo de objeto o tipo primitivo)
• Nombre del método
• Lista de parámetros
• Cuerpo del método
Las tres primeras partes se conocen como interfaz o
firma del método.
28. Definiendo clases
En C++:
• es posible definir variables y funciones que
no pertenezcan a una clase.
• las clases se declaran en un fichero
<nombre>.h y se implementan sus métodos
en un fichero <nombre>.cpp a menos que la
función sea inline.
29. Ejemplo en C++
// en C++, fichero.h // en C++, fichero.h
class Date { class Date {
int d; int d;
public: public:
//por defecto es inline int D();
int D(){return d;} };
};
//En fichero.cpp
inline int Date::D() {
return d;
}
//otra variante
int Date::D() {
return d;
}
30. Constructor
Es un tipo especial de método utilizado para crear
objetos o instancias de una clase.
Características
• Su nombre coincide con el de la clase.
• No tiene valor de retorno (ni void)
• Una clase puede tener varios constructores (ejemplo
típico de sobrecarga de funciones), pero la lista de
parámetros tiene que variar.
• Los constructores deben diferir en tipo y/o cantidad
de parámetro.
31. Constructor
Características
• Si la clase tiene un constructor, todos los objetos de
la clase deben ser inicializados invocándolo.
• Si el constructor tiene parámetros al invocarlo hay
que suministrarlos.
• De no definirse un constructor para la clase, el
compilador genera un constructor por defecto.
• El constructor por defecto, no tiene parámetros e
inicializa cada atributo con el valor nulo por defecto.
• Si un constructor no tiene parámetros se considera
el constructor por defecto.
32. Constructores en C++
• Existe un tipo especial de constructor llamado
constructor copia, cuyo parámetro es una referencia
a una instancia de la clase.
• El constructor copia debe copiar cada miembro de la
clase.
• No hay constructores virtuales ya que al construir se
debe conocer el tipo exacto del objeto.
33. Encapsulamiento
Es una de las propiedades de la POO que define que
el objeto debe ser una cápsula o caja negra que
encapsula su funcionamiento y estructura interna.
Sólo se ven desde afuera los miembros (la interfaz
para el caso de los métodos) con visibilidad pública.
Buenas Prácticas: los atributos deben ser privados o
protegidos y se debe acceder a ellos a través de los
métodos que pueden ser públicos.
34. Encapsulamiento
INTERFAZ de la CLASE
CLASE
CLASE
Datos y
Funciones Miembros
Privadas, Protegidas y
de Paquete
Atributos Públicos Métodos Públicos
instancia1 instancia2
35. Encapsulamiento
El encapsulamiento permite:
• Ocultar detalles de implementación.
• Simplificar el programa.
• Minimizar el impacto del cambio.
• Garantizar integridad de los datos.
36. Alcance de variables
En C++, existen variables:
•Globales
•Locales
•Variables de instancia
•Variables de clase
37. Alcance de variables
En C++, las clases tienen su propio ámbito.
int a = 1; // variable global
class TClase
{
int a;
public:
TClase(int);
};
TClase clase(5);
TClase.a; // error, trata de encontrala en el
// ámbito de TClase y es privada.