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
10
Embed
Programación orientada a objetos I - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/poo_dia1... · Programación en C++ Santiago Muelas Pascual [email protected]
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
6/20/11
1
Programación orientada a objetos I
Curso INEM. Programación en C++ Santiago Muelas Pascual
! 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
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
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;!
}!
!
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
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;?
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!