Programacion Orientada AObjetos Con C
Programacion Orientada AObjetos Con C
Análisis
Mantenimiento
Depuración
Diseño
Implementación
Factores de calidad del software
Subrutinas.
Procedimientos.
Módulos.
Tipos abstractos de datos.
Objetos
Programación Visual. (Eventos).
Componentes.
Tipo de datos abstracto (TDA)
Encapsulamiento Objetos
Polimorfismo Mensajes
Modularidad Funciones Miembro
Abstracción Clases
Herencia Instancias
Persistencia Jerarquía
Ligado tardío Composición
Genericidad Asociación
Concurrencia Interfaz
Abstracción
class Nombre
{
cuerpo de la clase
};
Encapsulamiento
class Nombreclase {
private:
// Miembros privados
protected:
// Miembros protegidos
public:
// Miembros públicos
};
Funciones miembro
tipo_retorno NombreClase::NombreFuncion(lista de
argumentos)
{
…
}
Funciones miembro en C++
Constructores
NombreClase::NombreClase(argumentos):lista_inic
{
…
}
Destructores
NombreClase::~NombreClase(lista de argumentos)
{
…
}
Funciones miembro en C++
class Complejo {
double real; double imag;
public:
Complejo( );
Complejo(double);
Complejo(double,double);
void escribir();
Complejo operator + (const Complejo) const;
Complejo operator - (const Complejo) const;
};
Polimorfismo de funciones miembro en C++
void Complejo::escribir( ) {
cout << “\nreal: “ << real << “ imaginaria: “ << imag;
}
Polimorfismo por sobrecarga de
operadores en C++
class base { … };
Derivación pública
public public
protected protected
private no accesible
Derivación protegida
public protected
protected protected
private no accesible
Tipos de derivación de herencia en C++
class Habitacion {
int tamano_m_cuadrados;
public:
Habitacion(const int);
~Habitacion( );
void Tamano( );
};
Habitacion::~Habitacion( ) {
cout << “\nDestructor de habitacion”;
}
Herencia simple en C++
Habitacion::Habitacion(const int n)
{
tamano_m_cuadrados = n;
cout << “\nConstructor de Habitacion”;
}
void Habitacion::Tamano( )
{
cout << “\nMts cuadrados: “ << tamano_m_cuadrados;
}
Herencia simple en C++
void Oficina::plantilla( ) {
cout << “\nNumero de empleados: ” << num_plantilla;
}
Herencia simple en C++
void proc_oficina( )
{
Oficina H999(45,5);
H999.plantilla( );
H999.Tamano( );
}
Herencia simple en C++
class Presentar
{
int limite, valor;
public:
Presentar(int val,int lim) { valor = val; limite = lim; }
void Mostrar( ) { cout << valor; }
};
Objetos compuestos en C++
class Reloj
{
Presentar horas, minutos;
public:
Reloj(int ValHor,int ValMin):horas(ValHor,24),
minutos(ValMin,60) { }
void Ver( );
};
Objetos compuestos en C++
void Reloj::Ver( )
{
horas.Mostrar( );
cout << “\:”;
minutos.Mostrar( );
}
Herencia múltiple
Elemento
Elemento
asegurable con
interés
Bienes
Cuenta Valores
bancaria Bienes
Inmuebles
class A {
protected:
int datos;
public:
void func( ) { }
};
class B:public A {
…
};
Herencia múltiple en C++
class C:public A
{
…
};
int main(void)
{
D d;
// d.func( ) provoca error “Member is ambiguos”
d.B::func( );
}
Herencia repetida en C++ (Por omisión)
B B
D1 D2
Z
Herencia repetida en C++ (Por omisión)
D1 D2
Z
Herencia repetida en C++ (uso de clases
base virtuales)
class figura {
public:
virtual double CalcularArea(void) const;
virtual void Dibujar(void) const;
};
Ligadura tardía en C++
#ifndef _ _INMIN_H
#define _ _INMIN_H // Evitar múltiples #include
template <class T> T min(T a,T b) {
if(a <= b)
return a;
else
return b;
}
#endif
Genericidad en C++.
Plantillas de funciones
main( ) {
int e1 = 100, e2 = 200;
double d1 = 3.141592, d2 = 2.718283;
char c1 = ‘B’, c2 = ‘W’;
cout << “min(e1,e2) es igual a “ << min(e1,e2);
cout << “min(d1,d2) es igual a “ << min(d1,d2);
cout << “min(c1,c2) es igual a “ << min(c1,c2);
return 0;
}
Genericidad en C++.
Plantillas de clases
Cola <int,2048> a;
Cola <char,512> b;
Cola <char,1024> c;
Cola <char,512 * 2> d;
Dos nombres de clases plantillas se refieren a
las mismas clases, sólo si los nombres de
plantillas son idénticos y sus argumentos tienen
valores idénticos. En consecuencia, sólo las
variables c y d tienen los mismos tipos.
Persistencia
En raices.h
enum error_raices(no_raices_reales,coeficientes_a_cero);
void raices(float a,float b,float c,float &r1, float &r2)
throw(error_raices);
Excepciones en C++
#include “raices.h”
main( ) {
float a, b, c, r1, r2;
// Fijar valores para a, b, y c
try {
raices(a, b, c, r1, r2);
}
Excepciones en C++
catch (error e) {
switch(e) {
case no_raices_reales:
cout << “Ninguna raíz real”; break;
case coeficiente_a_cero:
cout << “Primer coeficiente cero”;
break;
}
}
}
Categorías de objetos
Cosas tangibles.
Roles o papeles jugados o representados por
personas.
Organizaciones (empresa, división, equipo…).
Incidentes (sucesos, eventos u ocurrencias,
tales como vuelo, accidente, llamado a un
servicio…).
Especificaciones.
Categorías de objetos
UML
Booch
Coad/Yourdon
OMT (Rambaugh et al)
Tom Demarco
James Martin
Otras 300 metodologías.
Criterios de calidad del diseño OO