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

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

Programación orientada a objetos IIgráfica de visualizaciones

Publicado el 9 de Mayo del 2017
585 visualizaciones desde el 9 de Mayo del 2017
8,8 MB
10 paginas
Creado hace 13a (20/06/2011)
Programación orientada a

objetos II

Curso INEM. Programación en C++

Santiago Muelas Pascual

[email protected]



Repaso de conceptos

!   Clase
!   Objeto
!   Atributos
!   Métodos
!   Cambio de enfoque

!   Constructor
!   Creación de un objeto
!   Declaración/Definición
!   Destructor
! Get/Set

int cuenta; ingresa(cuenta,500);!
Cuenta micuenta; micuenta.ingresa(500);!

Ocultación de la información

Cohesión y acoplamiento

!   El acceso directo a tributos no es recomendable porque revela

la estructura interna del objeto
!   Los métodos definen cómo se debe usar un objeto
!   Permitir el acceso a los atributos es dar “vía libre” a manipular

su estado sin control

!   Nos limita la posibilidad de modificar la implementación

!   En su lugar se deben definir métodos que, de forma genérica,

modifiquen el estado de acuerdo a consideraciones
semánticas

!   Se debe prohibir el acceso a los atributos

!   Modificadores de la visibilidad

!   Cohesión: Grado de relación entre las diferentes características de

un objeto
!   Objeto con una función muy bien definida: muy cohesionado
!   Objeto con muchas funciones no relacionadas: poco cohesionado
!   Acoplamiento: Grado de dependencia entre los diferentes objetos

!   Programa en el que todas las clases tienen funciones distintas y

definidas: Poco acoplado

!   Programa en el que todas las clases participan en todas las tareas

Muy acoplado

!   Se debe maximizar la cohesión de cada objeto y minimizar el

acoplamiento entre clases distintas

6/20/11
 

1
 

Estilos de declaración de clases:

struct y class

class Perro!

{!

char inicial;!

int edad;!

Perro(int an);!

…!

};!

struct Perro!

{!

char inicial;!

int edad;!

Perro(int an);!

…!

};!

Los miembros por defecto
son privados

Los miembros por defecto
son públicos

El puntero this

!   Dentro de un método, la palabra reservada this representa al

puntero implícito al objeto actual.

!   Lo pasa el compilador como el primer argumento implícito

de cada llamada de un método

!   Se utiliza implícitamente para hacer referencia tanto a los

atributos como a los métodos

!   También se puede utilizar de manera explícita

El puntero this

El puntero this

!   Para hacer llamadas encadenadas

…!
Rectangulo& miRect(1,1,2,3);!
miRect.traslada(2,3).aumenta(2);!

Perro.h
class Perro !

{!

int anyos;!

public:!

Perro(int an);!

…!

};!

Perro.cpp
#include “Perro.h”!
Perro::Perro(int anyos) !
{!
(*this).anyos = anyos!
// o también!
this->anyos = anyos;!
}!
…!
!

6/20/11
 

2
 

6/20/11
 

Clases y const

Atributos const

!   Control extra para evitar que un objeto pueda modificarse
!   Se puede aplicar a:

!   Atributos
!   Métodos
!   Objetos

!   Sólo se pueden inicializar y no se pueden modificar

class Contenedor !
{!
const int maxSize_;!
Contenedor(int maxSize);!
}!

!   ¿Cómo controla el compilador que sólo se pueda inicializar una vez?

!   Lista de inicialización del constructor

Lista de inicialización del

constructor

!   Desarrollada originalmente para el uso con herencia

!   Se verá más adelante

!   Sólo ocurre en el constructor
!   Permite que se establezca un valor en el momento de creación de

los atributos
!   Si no, en el constructor tendrían un valor indeterminado

Perro::Perro(int ed) !

{!

// Aquí edad tiene un valor determinado!

edad = ed;!

}!

Lista de inicialización del

constructor

!   Sólo en la definición del constructor

!   Antes de la primera {

!   Cada atributo se inicializa con el valor determinado entre los

paréntesis

!   Si hay más de un atributo, se separa con comas
Constructor(int par, int par2) : atrib1(par1), atrib2(par2)
{ …}

3
 

6/20/11
 

Métodos const

!   No pueden alterar el estado de ningún atributo

!   ¿Qué tipo de métodos que hemos visto deberían llevar const?

!   Métodos get, imprime, …

!   Llevan el modificador const al final de su declaración

!   Y definición!!!!!

Lista de inicialización del

constructor

Perro::Perro(int ed) : edad(ed)!

{!

}!

Contenedor::Contenedor(int maxSize) : maxSize_(maxSize)!

{!

}!

Métodos const

Métodos const

Perro.h!

…!

int getEdad() const;!

…!

Perro.cpp!

…!

int Perro::getEdad() const {!

return edad;!

}!

Perro.h!

…!

int getEdad() const;!

…!

Perro.cpp!

…!

int Perro::getEdad() const {!

edad = 2; // ¿Qué pasa?!

return edad;!

}!

4
 

Objetos const

Constructor copia

!   Evita que se modifique el estado de un objeto
!   Sólo se permite invocar métodos const sobre este objeto

int main() !

{!

const Perro miPerro(2);!

cout << miPerro.getEdad() << endl;!

miPerro.setEdad(2); // ¿Qué pasa?!

}!

!   ¿Tipos de paso de parámetros?

!   Por valor y por referencia

!   ¿Qué pasa en el paso por valor?

! Ej: int a=2; miFuncion(a);

!   ¿Y qué pasa con una función que recibe/devuelve un objeto?

! Ej: miPancho(2); vetenerinario.anyade(miPancho)

Constructor copia

Constructor copia

!   El constructor copia se llama automáticamente cuando se

pasa/devuelve un objeto de una función

!   O cuando se crea un objeto con otro como parámetro

!   Perro miPancho2(miPancho);

!   El compilador genera uno por defecto si no se define

!   Hace una copia de todos los atributos

!   Podemos redefinirlo

! Ej: Para hacer copias del contenido apuntado por variables de

tipo puntero

class Perro!

{!

int edad;!

Perro(int ed);!

Perro::Perro(int ed) !

{!

edad = an;!

}!

Perro(const Perro &otro);!

Perro(const Perro &otro)!

…!

};!

{!

edad = otro.edad;!

}!

!

6/20/11
 

5
 

Constructor copia

Valores por defecto

!   ¿Qué pasa si lo declaro private?

!   Prohíbo el paso por valor

!   Permite asignar argumentos por defecto u omisión a

parámetros

!   Es un valor dado en la declaración de un parámetro de un
método que permite al compilador insertar automáticamente
ese valor cuando no se incluya en la llamada

Recordatorio: Constructor

Valores por defecto

!   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;!

}!

!

!   Se está repitiendo la mayor parte del código de los

constructores

!   Los valores por defecto nos permiten evitar este tipo de

redundancia

…!
Perro(int an, Color col=MARRON); !
// Me permite llamar!
Perro(2); //automáticamente me inserta MARRON!
Perro(2,NEGRO);!

6/20/11
 

6
 

Valores por defecto

Valores por defecto

class Perro !
{!
enum Color {MARRON, NEGRO};!

#include “Perro.h”!

!

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

int anyos;!
Color color;!
public:!

Perro(int an, Color col=MARRON); !
…!
};!

anyos = an;!

color = col;!

}!

!

!   Son una ayuda del lenguaje

!   De la misma manera que la sobrecarga de métodos

!   Ambos métodos permiten utilizar un mismo nombre para

situaciones distintas

!   Si los métodos tienen comportamientos muy distintos

!   Sobrecarga de métodos

Valores por defecto

Atributos estáticos o de clase

!   Limitaciones/Restricciones:

!   Sólo los últimos parámetros pueden ser asignados de esta

manera
!   No puedo tener un parámetro por defecto seguido de uno que no lo

es Perro(int edad=2,Color color) // ERROR

!   Al realizar todos los parámetros que omita tendrán valores por
defecto
Perro(int edad=2, Color color=MARRON, int id=3);
Perro(4); // color valdrá MARRON e id 3

!   ¡Sólo se pueden usar al declarar el método!

!   Compartidos por todos los objetos

!   Similares a las variables globales pero con ámbito de clase

!   Representa información intrínseca de la clase
!   Existen incluso cuando no existen objetos de esa clase
!   Comienza con la palabra reservada static
!   La definición tiene que existir y además tiene que estar fuera

de la declaración de la clase



6/20/11
 

7
 

6/20/11
 

Atributos estáticos o de clase

Atributos estáticos o de clase

class Perro !

{!

public:!

int Perro::numPerros=0;!

Perro::Perro(){!

numPerros+=1;!

static int numPerros;!

}!

Perro(); !

};!

int main() {!

Perro miPancho, miPancho2;!

cout << Perro::numPerros;!

}!

!

!   Pueden tener visiblidad public, private y protected
!   Se inicializan una sola vez
!   Uso típico

!   Controlar el número de objetos que se han creado
!   Constantes de una clase

!   ¿Cómo?

static const PI = 3.14;

!
!   La definición va incluida en la declaración

Métodos estáticos o de clase

Métodos estáticos o de clase

!   Accede solamente a atributos y métodos estáticos
!   Tienen el modificador static delante de la declaración del

método

!   Se invocan o bien dentro de un método o por medio del

identificador de clase

!   No tienen apuntador this

class Perro !

{!

static int numPerros;!

public:!

static int getNumPerros();!

Perro(); !

};!

int Perro::numPerros=0;!
Perro::Perro(){!
numPerros+=1;!

}!
int Perro::getNumPerros(){!
return numPerros;!

}!
int main() {!
Perro miPancho, miPancho2;!

cout << Perro::getNumPerros();!
}!
!

8
 

Resumen: Atributos y variables

Funciones inline

!   Atributo de instancia: Definido para las instancias de una

clase
!   Una copia por objeto

!   Atributo de clase: Definido para la clase

!   Común para todos los objetos

!   Variable local: Definida dentro del cuerpo de un método.

!   De ámbito restringido

!   En este tipo de funciones, el código de la función se inserta

en fase de compilación en el lugar de la llamada de la
función
!   Eficiencia

Funciones inline

Funciones inline

Perro.h
class Perro !
{!
int anyos;!
public:!
int getAnyos() !
{!
return anyos;!
  • Links de descarga
http://lwp-l.com/pdf3429

Comentarios de: Programación orientada a objetos II (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