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
Elementos 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
! 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
6/20/11
1
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?
No hay
Buscar el
café
café
Comprar
café
Café
Cocina
Tienda
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
6/20/11
2
Otros conceptos importantes
UML
! Encapsulamiento
! Polimorfismo
! Herencia
! …
Se verán más adelante
! 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
6/20/11
3
Atributos
Métodos
! Describen el estado interno de cada objeto concreto
! Pueden ser:
! Tipos básicos (int, bool, char, etc.)
! Arrays de elementos
! Punteros
! Otros objetos
! Definen el comportamiento de los objetos de una clase
! Devuelven (o no) un resultado
! Pueden necesitar parámetros
Métodos y atributos
Especificación e
Implementación
• Atributos
•
raza: Bulldog
• edad: 1 año
• nombre: “Pancho”
• …
• Métodos
•
ladra()
• come()
• duerme()
• …
! 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
6/20/11
4
Especificación (archivo *.h)
Implementación (archivo *.cpp)
Perro.h
class Perro !
{!
int anyos;!
!
int edad();!
};!
Atributos
Métodos
Perro.cpp
#include “Perro.h”!
int Perro::edad() !
{!
return anyos;!
}!
!
Ejercicio
! Añada el método ladra a la clase Perro para que imprima
el mensaje “GUAU” cuando sea llamado
Perro.h
class Perro !
{!
int anyos;!
int edad();!
};!
Compilar!
g++ -c Perro.cpp!
!
Perro.cpp
#include “Perro.h”!
int Perro::edad() !
{!
return anyos;!
}!
!
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
6/20/11
5
Visibilidad/Control de acceso
Métodos habituales: Constructor
! 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
class Perro !
{!
int anyos;!
public:!
void ladra();!
private:!
int edad();!
};!
! 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
Métodos habituales: Constructor
Perro.h
class Perro !
{!
int anyos;!
public:!
Perro(int an);!
…!
};!
Perro.cpp
#include “Perro.h”!
!
!
Perro::Perro(int an) !
{!
anyos = an;!
}!
…!
!
! Existe sobrecarga (distintos parámetros)
class Perro !
{!
#include “Perro.h”!
Perro::Perro(int an) !
enum Color {MARRON, NEGRO};!
{!
int anyos;!
Color color;!
public:!
Perro(int an);!
Perro(int an, Color col); !
…!
};!
anyos = an;!
color = MARRON;!
}!
Perro::Perro(int an, Color col) {!
anyos = an;!
color = col;!
}!
!
6/20/11
6
Métodos habituales: Constructor
Algunas preguntas
! Existe sobrecarga (distintos parámetros)
class Perro !
{!
#include “Perro.h”!
Perro::Perro(int an) !
enum Color {MARRON, NEGRO};!
{!
int anyos;!
Color color;!
public:!
Perro(int an);!
Perro(int an, Color col); !
…!
};!
Perro(an,MARRON);!
}!
Perro::Perro(int an, Color col) {!
anyos = an;!
color = col;!
}!
!
! ¿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
Métodos habituales: Destructor
! ¿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)
! 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
6/20/11
7
Métodos habituales: Destructor
Métodos habituales: Get/Set
Perro.h
class Perro !
{!
…!
~Perro();!
…!
};!
Perro.cpp
#include “Perro.h”!
!
Perro::~Perro() !
{!
…!
}!
…!
!
! 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
Asignación de objetos
Perro.h
class Perro !
{!
int anyos;!
int getAnyos();!
void setAnyos(int valor);!
…!
};!
Perro.cpp
#include “Perro.h”!
int Perro::getAnyos()!
{!
return anyos;!
}!
void setAnyos(int valor)!
{!
anyos = valor;!
}!
!
! 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;?
6/20/11
8
Asignación de objetos
Comparació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)
! ¿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
Creació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)
! 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!
6/20/11
9
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
6/20/11
10
Comentarios de: Programación orientada a objetos I (0)
No hay comentarios