programación orientada a objetos i · programación orientada a objetos i curso inem....

10
6/20/11 1 Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual [email protected] Introducción ¿Qué es la POO? Un paradigma de programación Un paradigma es una forma de afrontar la construcción código software No hay paradigmas mejores ni peores Todos tienen sus ventajas e inconvenientes Hay distintos paradigmas: POO, Estructurado, Funcional, Lógico, etc. Características de la POO Facilidad de diseño y relación con el mundo real Reusabilidad y facilidad de mantenimiento Del lenguaje máquina hacia el mundo real Sistemas más complejos Abstracción Trabajo en equipo Elementos de la POO Objetos: Elementos que interactúan entre sí para conseguir un fin Autónomos Con una funcionalidad concreta definida Instancias de una clase Clases: Especificación de un conjunto de elementos Todo objeto pertenece a una clase

Upload: others

Post on 12-Feb-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

1  

Programación orientada a objetos I

Curso INEM. Programación en C++ Santiago Muelas Pascual

[email protected]

Introducción

!   ¿Qué es la POO? !   Un paradigma de programación

!   Un paradigma es una forma de afrontar la construcción código software !   No hay paradigmas mejores ni peores

!   Todos tienen sus ventajas e inconvenientes

!   Hay distintos paradigmas: POO, Estructurado, Funcional, Lógico, etc.

Características de la POO

!   Facilidad de diseño y relación con el mundo real

!   Reusabilidad y facilidad de mantenimiento

!   Del lenguaje máquina hacia el mundo real

!   Sistemas más complejos !   Abstracción

!   Trabajo en equipo

Elementos de la POO

!   Objetos: Elementos que interactúan entre sí para conseguir un fin !   Autónomos

!   Con una funcionalidad concreta definida

!   Instancias de una clase

!   Clases: !   Especificación de un conjunto de elementos

!   Todo objeto pertenece a una clase

Page 2: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

2  

Objetos y clases Objetos

!   Los objetos tienen propiedades que los distinguen !   Comunes a todos los de su clase

!   Propias de cada uno

!   Los objetos representan los conceptos fundamentales del programa !   y de su interacción surge la funcionalidad

!   Los objetos interactúan entre sí por medio de mensajes

¿Como funciona un programa orientado a objetos?

Cocina

No hay café

Tienda

Comprar café

Café

Buscar el café

Resumen de objetos y clases

!   Clases !   Representan conceptos o entidades significativas de un

problema

!   Se pueden ver como plantillas para definir elementos (objetos)

!   Objetos !   Elementos con comportamiento definido en la clase y estado

concreto

!   Instancias de clase

!   Interactúan por medio de mensajes

Page 3: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

3  

Otros conceptos importantes

!   Encapsulamiento

!   Polimorfismo

!   Herencia

!   … Se verán más adelante

UML

!   UML (Unified modeling language): Lenguaje unificado de modelos

!   “Mapa” del código. No sirve para desarrollar sino para describir

!   Se utilizan diagramas diferentes. !   13 en UML 2.0

Declaración de clases

!   Una clase en C++ debe ser declarada antes de poder ser utilizada

class nombre !{! cuerpo de la clase!};!

Cuerpo de la clase: atributos y métodos

!   Estado: Describe la situación interna del objeto. !   Existen varias formas de definir distintos estados

!   El estado distingue a los objetos de la misma clase !   Cada uno tiene su estado

!   Son los atributos

!   Comportamiento: Describe los servicios que proporciona una clase lo que se puede hacer con ella). !   Son los métodos

Page 4: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

4  

Atributos

!   Describen el estado interno de cada objeto concreto

!   Pueden ser: !   Tipos básicos (int, bool, char, etc.)

! Arrays de elementos

!   Punteros

!   Otros objetos

Métodos

!   Definen el comportamiento de los objetos de una clase

!   Devuelven (o no) un resultado

!   Pueden necesitar parámetros

Métodos y atributos

•  Atributos •  raza: Bulldog •  edad: 1 año •  nombre: “Pancho” •  …

•  Métodos •  ladra() •  come() •  duerme() •  …

Especificación e Implementación

!   Dos vistas diferentes de una clase: !   Especificación de la clase

!   Declaración de atributos y métodos

!   Implementación de la clase !   Definición de los métodos

!   Ocultación de los detalles de implementación

Page 5: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

5  

Especificación (archivo *.h)

class Perro !

{!

int anyos;!

!

int edad();!

};!

Perro.h

Atributos

Métodos

Implementación (archivo *.cpp)

#include “Perro.h”!

int Perro::edad() !

{!

return anyos;!

}!

!

Perro.cpp

Ejercicio !   Añada el método ladra a la clase Perro para que imprima

el mensaje “GUAU” cuando sea llamado

class Perro !

{!

int anyos;!

int edad();!

};!

Perro.h !

#include “Perro.h”!

int Perro::edad() !

{!

return anyos;!

}!

!

Perro.cpp

Compilar!

g++ -c Perro.cpp!

Visibilidad/Control de acceso

!   Puede (y suele) haber distintos niveles de visibilidad para los miembros (atributos y métodos) de una clase.

!   Existen tres tipos de modificadores: ! public: se puede acceder desde cualquier lugar

! private: sólo se puede acceder desde la propia clase ! protected: sólo se puede acceder desde la propia clase o desde una

clase que herede de ella !   Se verá más en detalle en el tema de herencia

!   Se aplican a todas las definiciones que vengan a continuación !   Hasta que se encuentre un nuevo modificador

!   Solamente hay que utilizarlo en la especificación de la clase

Page 6: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

6  

Visibilidad/Control de acceso

class Perro !

{!

int anyos;!

public:!

void ladra();!

private:!

int edad();!

};!

!   Sólo se puede acceder/invocar a anyos y edad desde métodos de la clase Perro

!   ladra puede ser llamado desde cualquier otra clase

!   Si no se especifica nada en class la visibilidad es private

Métodos habituales: Constructor

!   Sirve para inicializar un objeto al crearlo

!   Se utiliza el nombre de la clase

!   No devuelve nada por definición

NombreClase( parámetros ) { … }

Métodos habituales: Constructor

class Perro !

{!

int anyos;!

public:!

Perro(int an);!

…!

};!

#include “Perro.h”!

!

!

Perro::Perro(int an) !

{!

anyos = an;!

}!

…!

!

Perro.cpp Perro.h

Métodos habituales: Constructor

!   Existe sobrecarga (distintos parámetros)

class Perro !

{!

enum Color {MARRON, NEGRO};!

int anyos;!

Color color;!

public:!

Perro(int an);!

Perro(int an, Color col); !

…!

};!

#include “Perro.h”!

Perro::Perro(int an) !

{!

anyos = an;!

color = MARRON;!

}!

Perro::Perro(int an, Color col) {!

anyos = an;!

color = col;!

}!

!

Page 7: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

7  

Métodos habituales: Constructor

!   Existe sobrecarga (distintos parámetros)

class Perro !

{!

enum Color {MARRON, NEGRO};!

int anyos;!

Color color;!

public:!

Perro(int an);!

Perro(int an, Color col); !

…!

};!

#include “Perro.h”!

Perro::Perro(int an) !

{!

Perro(an,MARRON);!

}!

Perro::Perro(int an, Color col) {!

anyos = an;!

color = col;!

}!

!

Algunas preguntas

!   ¿Qué ocurre si no hay constructor en una clase? !   El compilador implícitamente crea el constructor por defecto

!   ¿Siempre tienen algún valor los atributos de una clase? !   Sí, siempre tendrán algún valor (aunque en ocasiones pueda ser

indeterminado)

!   ¿Qué ocurre si en el constructor de un objeto no se inicializan todos sus atributos? !   Que tendrán un valor indeterminado

Algunas preguntas

!   ¿Qué ocurre si se define un constructor con visibilidad private?

!   Sólo se podrán crear objetos desde métodos internos de la clase !   Métodos de clase

!   ¿Se puede utilizar una clase como atributo de otra?

!   Sin ningún problema

!   ¿Puedo ejecutar un método sin haber creado un objeto de esa clase?

!   No, para ejecutar un método de un objeto es necesario haber creado antes el objeto.

!   Los métodos de clase o estáticos sí que se pueden ejecutar sin necesidad de un objeto (se verán más adelante)

Métodos habituales: Destructor

!   Para liberar recursos del objeto !   Muy utilizado cuando se hace uso de la memoria dinámica

!   Se verá más adelante

!   Cerrar ficheros, conexiones, etc.

!   ~ + NombreClase

!   No devuelve ni recibe nada por definición

!   Puede tener visibilidad privada pero no es lo recomendable

Page 8: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

8  

Métodos habituales: Destructor

class Perro !

{!

…!

~Perro();!

…!

};!

#include “Perro.h”!

!

Perro::~Perro() !

{!

…!

}!

…!

!

Perro.cpp Perro.h

Métodos habituales: Get/Set

!   Sirven para modificar los atributos de una clase

!   No son un nuevo tipo de métodos !   Convenio “de factor”

! Get !   Devuelve un atributo sin modificarlo

!   Set !   Modifica un atributo con el valor pasado como parámetro

Métodos habituales: Get/Set

class Perro !

{!

int anyos;!

int getAnyos();!

void setAnyos(int valor);!

…!

};!

#include “Perro.h”!

int Perro::getAnyos()!

{!

return anyos;!

}!

void setAnyos(int valor)!

{!

anyos = valor;!

}!

!

Perro.cpp Perro.h

Asignación de objetos

!   Por medio del operador =

!   Se hace una copia de todos los atributos

!   Se puede redefinir !   Ya se verá

!   ¡OJO! El operador = tiene dos funciones Perro a; Perro b; ¿b=a;? ¿Perro c = b;?

Page 9: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

9  

Asignación de objetos

!   Por medio del operador =

!   Se hace una copia de todos los atributos

!   Se puede redefinir !   Ya se verá

!   ¡OJO! El operador = tiene dos funciones Perro a; Perro b; b=a; // asignación Perro c = b;// Constructor copia // Misma llamada que Perro c(b)

Comparación de objetos

!   ¿Qué devuelve este código?

class Prueba{ public: }; int main() { Prueba p,p1; p=p1; if (p==p1) cout << "son iguales" << endl; else cout << "no lo son" << endl; }

Comparación de objetos

!   Por defecto no se genera el código para el operador de comparación == !   Ni para el operador !=

!   Hay que definirlo para comparar objetos !   O crearnos otro método (ej. equals)

Creación de objetos

!   Después de que se haya declarado e implementado los métodos de una clase se puede crear un objeto de esa clase !   Similar al de cualquier otra variable

!   Pasando los argumentos al constructor

Perro miPancho(2,NEGRO);!Perro miPancho; // Si no hay parámetros!

Page 10: Programación orientada a objetos I · Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Introducción ! ¿Qué es la

6/20/11  

10  

Operador “.”

!   Para acceder a los miembros de un objeto

Perro miPancho(2,NEGRO);!!miPancho.ladra();!!Color elColorDePancho = miPancho.color;!!miPancho.setAnyos(3);!!

!   Dentro de un método no hace falta utilizar el operador “.” para acceder a un miembro de la misma clase

Ejercicios