Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Técnicas de programación
2. Tipos de Datos
3. Definición de clases
4. Constructores y destructores
5. Otros elementos
Programar es
…
Automatizar la resolución de problemas (reales)
mediante una máquina (ordenador).
Resolver un problema requiere:
Información que represente el “mundo” del problema.(Datos)
Mecanismos para procesar/manipular la información.
(Algoritmos)
Programa
Pequeños programas con:
Toda la secuencia de instrucciones del programa programa principal
datos
incluida en una sola función (main)
Datos incluidos en variables con ámbito global a todo el programa
Codificación poco eficiente (sobre todo para grandes programas):
Necesidad de repetir las secuencias de instrucciones
Solución
Extraer las secuencias de instrucciones que se repiten
fuera del programa principal->procedimientos/funciones
programa principal
datos
datos datos
func1 func2 proc
Mariano Pérez
func3
Programa
Objeto 1
Objeto 3
Objeto 4
Objeto 2
1. Técnicas de programación
2. Tipos de Datos
3. Definición de clases
4. Constructores y destructores
5. Otros elementos
Tipos de Datos
Los tipos de datos son abstracciones (elementos de
programación) que permiten declarar la naturaleza de la
información manejada en un programa.
Ejemplo: int x;
¿Qué representa dicha sentencia?
x puede almacenar números enteros en un determinado rango
(dominio).
x puede intervenir en (o ser manipulada mediante) determinadas
operaciones.
Objetos = Ejemplos
concretos de la clase que
Juan María Ana José responden al concepto.
1. Técnicas de programación
2. Tipos de Datos
3. Definición de clases
4. Constructores y destructores
5. Otros elementos
class Complejo
{
private: Declaración correcta
float real;
float imaginario = 0;
};
Incorrecta. No se
puede inicializar
Imprime() Imprime()
Inicializa(...) Inicializa(...)
Imprime() Imprime()
Inicializa(...) Inicializa(...)
void main() {
Hora h1, h2;
h1.Poner(9,30);
cin >> h2.hora;
No falla la
compilación, pero el cin >> h2.minutos;
Acceso no es h1.Mostrar();
Correcto, se rompe h2.Mostrar();
el encapsulamiento }
void Hora::Poner(int nHora, int nMinutos) {
if ( nHora >= 0 && nHora < 24)
hora = nHora;
if ( nMinutos >= 0 && nMinutos < 60)
minutos = nMinutos;
}
void Persona::Mostrar() {
cout << hora << ":" << minutos << endl;
}
31 Tema 3: POO en C++
Definición de Clases
Ocultación de la Información
Normalmente se definen como privado los atributos de la clase
y como públicos los métodos que operan o acceden a los
atributos.
De esta forma no se puede acceder directamente a los atributos, así
se evita que se usen de forma inadecuada.
A los métodos públicos de la clase se las llama ‘interfaz’ de la
clase.
Son el mecanismo para interactuar con el objeto
El interfaz indica lo que se puede hacer con la clase, no necesitamos
saber como está implementada para utilizarla.
Ventajas:
Es más sencillo operar con los objetos, Sólo necesitamos conocer los
métodos del interfaz para operar con los objetos sin necesidad de
conocer como está implementado por dentro el objeto
Se puede cambiar los atributos y la implementación de las
operaciones sin modificar el código que usa de los objetos
32 Tema 3: POO en C++
Definición de Clases
complejo.h complejo.cpp
class Complejo{ ...
public:
void Suma(Complejo c1, Complejo
c2);
void Asigna(float r, float i); Interfaz
void Muestra(); La implementación
private: podría ser desconocida
// Aquí irían los atributos
... (class string)
};
programa.cpp
#include "complejo.h"
#include <string> Inclusión de los
archivos de cabecera
void main() {
Complejo c1,c2,c3;
c1.Asigna(1.5, 6); c2.Asigna(4, 5.5); No necesitamos conocer
c3.Suma(c1,c2); la implementación
c3.Muestra();
}
1. Técnicas de programación
2. Tipos de Datos
3. Definición de clases
4. Constructores y destructores
5. Otros elementos
1. Técnicas de programación
2. Tipos de Datos
3. Definición de clases
4. Constructores y destructores
5. Otros elementos
Pasos:
Se declara un puntero de tipo base la clase del objeto que se
desea crear (por ejemplo Complejo *p;)
Se crea el objeto con el operador new
Se accede a los atributos y métodos públicos del objeto dinámico a
través del puntero, usando el operador ->
Cuando ya no es necesario el objeto en el programa, se destruye
con el operador delete
49 Tema 3: POO en C++ Asig.: Ampliación de Informática Mariano Pérez
Otros elementos
Reserva dinámica de objetos (2)
class Complejo {
private: void main()
float real,imag; {
public: Complejo *pc;
Complejo(){real= 0; imag= 0;} pc = new Complejo;
Complejo(float x, float y); pc->Asignar(2,3);
~Complejo(); pc->Mostrar();
void Asignar(float x, float y); delete pc;
void Mostrar(); }
};
real 2
pc
imag 3
Asignar(...)
Mostrar()
Complejo()
Complejo(...)
Complejo *parray;
parray = new Complejo[20]; //Array de 20 objetos
delete [] parray;
¿Cuándo utilizarlos?:
En general, no deberían utilizarse.
Se aplicaría cuando el programa ya ha sido completamente
desarrollado y depurado, y se comprueba que ciertos métodos
hacen más lenta la ejecución del programa.
En cualquier caso, sólo son aplicables a métodos con muy pocos
pasos
Por ejemplo: que se limitan a modificar un atributo (set), a mostrar un
atributo (get), etc.
52 Tema 3: POO en C++
Otros elementos
Definición de Métodos en Línea (2 métodos)
Añadiendo la palabra reservada inline en la cabecera de la definición
class Complejo { Cuando se invoque al
public: método el compilador
void Mostrar();
......... sustituirá el contenido del
}; método en lugar de la
inline void Complejo::Mostrar() { llamada
cout << real << "+i" << imag << endl;
}
persona.h fecha.h
class Persona { class Fecha{
public: public:
void Inicializa(string, string, Fecha();
Fecha); Fecha(int, int, int);
void Imprime(); int obtenerAnyo();
int obtenerAnyoNac(); int obtenerMes();
Persona(); int obtenerDia();
Persona(string, string, Fecha); void visualizarFecha();
private: void asignarFecha(int, int, int);
string nombre, direccion; void incrementarFecha();
Fecha nacimiento; private:
}; int anyo, mes, dia;
};
57 Tema 4: Clases
Otros elementos
Definición de Funciones Friend (amigas)
Podemos permitir que la función decrementa() y los métodos de
CB accedan a los datos de la clase CA, declarándolas como
amigas: usando la palabra reservada friend.
class CA
{
public:
friend class CB;
friend void decrementa (CA &dato);
.............
};
Las funciones y clases friend dan flexibilidad al C++ ya que
permite a funciones que no pertenecen a la clase acceder a sus
atributos y métodos privados por medio del operador (.) y flecha
(->).
Al declarar la función decrementa() como friend, permitimos que
dentro de la función se pueda acceder a los atributos y métodos
privados de la clase CA.
Al declarar la clase CB como amiga de la clase CA, todos los
métodos de la clase CB tendrán acceso a los atributos y métodos
privados de la clase CA.
58 Tema 4: Clases
Otros elementos
Funciones Friend (amigas)
59 Tema 4: Clases