PDF de programación - Programación orientada a objetos I

Imágen de pdf Programación orientada a objetos I

Programación orientada a objetos Igráfica de visualizaciones

Publicado el 9 de Mayo del 2017
380 visualizaciones desde el 9 de Mayo del 2017
9,1 MB
10 paginas
Creado hace 10a (20/06/2011)
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
  • Links de descarga
http://lwp-l.com/pdf3427

Comentarios de: Programación orientada a objetos I (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad