Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf ·...

121
3.1 Tipos de datos primitivos 3.2 Declaración de clases y subclases 3.3 Declaración de herencia e interfaces 3.4 Relaciones entre clases 3.5 Clases y métodos genéricos Lenguaje de Programación Orientado a Objetos

Transcript of Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf ·...

Page 1: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

3.1 Tipos de datos primitivos

3.2 Declaración de clases y subclases

3.3 Declaración de herencia e interfaces

3.4 Relaciones entre clases

3.5 Clases y métodos genéricos

Lenguaje de Programación Orientado a Objetos

Page 2: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

3.1 Tipos de datos primitivos

Page 3: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Aspectos básico de C++

Page 4: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

OPERADORES DE ASIGNACIÓN

Page 5: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

En el caso de los post-incrementos y post-decrementos pasa lo contrario: se

utilizará el valor actual del operando y luego se efectuará la operación de

incremento o decremento”

Page 6: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

también existen operadores para los punteros, sin embargo estos solo aplican

para aquellos apuntadores a matrices, arreglos o listas de elementos, y aunque se

muestran a continuación, se explicaran de una mejor forma en el material de

apuntadores o punteros en c++

Page 7: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

OPERADORES RELACIONALES

“Los operadores relacionales, también denominados operadores binarios lógicos

y de comparación, se utilizan para comprobar la veracidad o falsedad de

determinadas propuestas de relación (en realidad se trata respuestas a

preguntas). Las expresiones que los contienen se denominan expresiones

relacionales. Aceptan diversos tipos de argumentos, y el resultado, que es la

respuesta a la pregunta, es siempre del tipo cierto/falso, es decir, producen un

resultado booleano.

Si la propuesta es cierta, el resultado es true (un valor distinto de cero), si es falsa

será false (cero). C++ dispone de los siguientes operadores relacionales:

Page 8: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 9: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

OPERADORES LÓGICOS

“Los operadores lógicos producen un resultado booleano, y sus operandos

son también valores lógicos o asimilables a ellos (los valores numéricos son

asimilados a cierto o falso según su valor sea cero o distinto de cero). Por el

contrario, las operaciones entre bits producen valores arbitrarios. Los operadores

lógicos son tres, dos de ellos son binarios y el último (negación) es unario:

Page 10: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Si el resultado del operando izquierdo es cierto, se continúa con la evaluación de

la expresión de la derecha, que también es convertida a bool. Si el nuevo

resultado es true, entonces el resultado del operador es true. En caso contrario

el resultado es false.

Page 11: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

OPERADORES DE BITS

“Los operadores de movimiento son operadores a nivel de bits, y lo que hacen es

convertir una determinada cantidad a su equivalente en bits para posteriormente

realizar un desplazamiento de dicho valor. Estos operadores son:

Page 12: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

OPERADORES DE DIRECCIÓN

Además de los operadores aritméticos, de los que existen versiones para los

tipos numéricos y para los punteros, C++ dispone de dos operadores

específicos para estos últimos (punteros de cualquier tipo): la indirección “*” y la

referencia “&” . Además existen dos operadores específicos para punteros-a-

clases

Page 13: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

la clase cmath

Page 14: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Palabras clave

Page 15: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 16: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 17: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 18: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 19: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 20: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 21: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 22: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 23: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Sentencias de selección

La sentencia if

if (expresión booleana)

{

<sentencias>

}

else

{

<sentencias>

}

Page 24: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejercicio de clases

Implemente un programa en C++ que rellene un arreglounidimensional de 20 elementos y que escriba el contenido de losíndice impares y posteriormente los contenido del los índices pares

Page 25: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Entrada y salida estandar

#include <iostream> incluye definiciones y declaraciones para lasclases que definen E/S en C++ (iostream, istream y ostream)

#include <stdio.h> contiene las definiciones y declaraciones para lafunción estándar de E/S de C

Page 26: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Salida estándar

#include <iostream>

/* comentario1 */

// comentario2

using namespace std;

Void main()

{

count <<“hola mundo "\n“;

}

Page 27: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Salida con formato

Page 28: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Entrada estándar

#include <iostream>

/* comentario1 */

// comentario2

using namespace std;

Void main()

{ int cantidad

cin>>cantidad;

}

Page 29: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Operador de resolución del ámbito (::)

Permite acceder a una variable global cuya visibilidad ha sido ocultada por una variable global, también esusada para indicar a que clase pertenece una determinada función miembro

Page 30: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejemplo estructuras repetitivas

Page 31: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Do-while

Page 32: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

for

Page 33: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

SOBRECARGA DE FUNCIONES

Page 34: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Otro ejemplo

Page 35: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Primer practica c++

Page 36: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

3.2 Declaración de clases y subclases

Page 37: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Definición de clases en C++

Page 38: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejemplo

Page 39: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Complex

-int real

-int img

+Complex()

+Read(…)

+Write()

+suma()

Page 40: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 41: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 42: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 43: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 44: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Agenda versión Windows y dev c++

Page 45: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejemplo 2

Page 46: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 47: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejercicio de clase

Implemente un programa de vectores, dicho vector tendrá 4componentes, use paradigma orientado a objetos y como lenguajec++, y sus métodos serán los siguientes:

Lectura del vectorEscritura de un vectorNorma de un vectorMultiplicación del vector por un escalar

Page 48: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 49: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Destructores

Page 50: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Constructores

Es normal que una parte de un objeto necesite una inicialización antes de poder usarse.Un constructor no es más que una función miembro de la clase que aglutinará unconjunto de instrucciones que permiten inicializar memoria asociada a los objetos de laclase. Normalmente se utilizan para iniciar el objeto cuando éste se crea. Suscaracterísticas son:

Tiene en mismo nombre que la clase. Puede definirse inline o fuera de la declaración de la clase. Pueden aceptar parámetros, los cuales puede definirse con valores por defecto. ƒ Puede estar sobrecargado. Se puede declarar más de un constructor para una misma

clase si todos ellos tienen diferente lista de argumentos. Esto es útil si se quiere iniciar los objetos de varias formas diferentes.

No devuelven valores. No se puede especificar un valor de retorno cuando se declara un constructor, ni siquiera void. En consecuencia, un constructor no puede tener ninguna sentencia return.

El constructor se ejecuta automáticamente cuando se crea un objeto de tipo clase. No se invoca nunca de forma explícita.

ƒEl constructor se suele declarar en la sección pública. Si se hiciera en la sección privada sólo podría ser utilizado por los objetos que se creasen en las funciones miembro y en las funciones amigas

Page 51: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Se denomina constructor por defecto de la clase al constructor que no tiene argumentos.No es obligatorio definir constructores cuando se define una clase, pero es una buenatécnica de programación hacerlo. Si no se define ninguno, el compilador de formaautomática genera un constructor que no tiene ningún parámetro, un constructor pordefecto, que no hace nada, no inicia los datos miembro.

Page 52: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Destructores

Los destructores son funciones miembro especiales que sirven para eliminar un objeto deuna determinada clase. El destructor realizará procesos necesarios cuando un objetotermine su ámbito temporal, por ejemplo liberando la memoria dinámica utilizada por dichoobjeto o liberando recursos usados, como ficheros, dispositivos, etc.Al igual que los constructores, los destructores también tienen algunas característicasespeciales:

También tienen el mismo nombre que la clase a la que pertenecen, pero tienen el símbolo ˜ delante.

No tienen tipo de retorno, y por lo tanto no retornan ningún valor. No tienen parámetros. No pueden ser heredados. Deben ser públicos, no tendría ningún sentido declarar un destructor como privado, ya

que siempre se usan desde el exterior de la clase, ni tampoco como protegido, ya que no puede ser heredado.

No pueden ser sobrecargados, lo cual es lógico, puesto que no tienen valor de retorno ni parámetros, no hay posibilidad de sobrecarga.

Page 53: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Constructores sobrecargados

Page 54: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 55: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 56: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

3.3 Declaración de herencia e interfaces

Interface

Page 57: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Concepto de herencia Jerarquía de clases

La jerarquía de clases conectadas mediante relaciones de herencia formaestructuras de apariencia arborescente. Una clase puede heredar datos yfunciones miembros de una o más clases base, aquí sólo consideraremos laherencia simple (heredar de una única clase base) y no la múltiple.

Page 58: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

La relación de herencia entre clases puede ser: pública (public), privada (private) óprotegida (protected). La relación que se utiliza con mayor frecuencia es la pública.Dependiendo del número de clases y de cómo se relacionen, la herencia puede ser: a)Simple. b) Múltiple.

Tipos de Herencia.

Cuando sólo se tiene una clase base de la cual hereda la clase derivada, se dice quehay herencia simple(figura a). Sin embargo, la herencia simple no excluye laposibilidad de que de una misma clase base se pueda derivar más de una subclase oclase derivada (figura b)

Herencia Simple.

Page 59: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Person

a

-nombre

-dirección

-ciudad

+leer()

+visualizar()

Paciente

-id

-tel

-fecha_nac;

+leer_paciente()

+visualizar_paciente()

+enviar_fact()

Empleado

-id

-horas_extra

-tel

+leer_empleado()

+visualizar_emplea

do()

+enviar _sal();

Proveedor

-cod_vendedor

-saldo

-fax

-tel

-descuento

+leer_provedor()

+visualizar_provedor()

+pagar_fact()

Persona

-nombre

-dirección

-ciudad

+leer()

+visualizar()

Empleado

-id

-horas_extra

-tel

+leer_empleado()

+visualizar_emplea

do()

+enviar _sal();

Figura a) Figura b)

Page 60: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejemplo

Page 61: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 62: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Examen

2) Construir una clase Factura que descienda de la clase Precio y que incluya dosatributos específicos llamados emisor y cliente y, al menos, un método llamadoimprimirFactura.

1)

Page 63: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

3) Escribe un programa para una biblioteca que contenga libros y revistas.

Page 64: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 65: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

4) Ejemplo de una jerarquía de herencia de distintos tipos de cuenta

Cuenta

Cuenta corrienteCuenta ahorros

Cuenta ahorradores Estudiante

Page 66: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

En el tipo de herencia múltiple se usan dos o más clases base paraderivar una clase. Es decir, la clase derivada comparte los atributos ylos métodos de más de una clase (Figura c).

Herencia Múltiple.

Nota: Java no permite herencia múltiple que ocurre cuando

una clase se deriva de dos o más clases en C++ esto si es

valido

Page 67: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Figura

Círculo Triángulo Cuadrado

es un

Ejercicio de clases(herencia simple)

+ lado+Int l1,l2,l3,b,h+int r;

-Circulo()-Area()-Perimetro()

-Triangulo()-Area()-Perímetro()

-Cuadrado()-Area()-Perimetro()

+String nombre+String color

-Figura ()-write()

Page 68: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Java

Paciente_empleado

…………………..

……………………..

Persona

-nombre

-dirección

-ciudad

+leer()

+visualizar()

Paciente

-id

-tel

-fecha_nac;

+leer_paciente()

+visualizar_paciente()

+enviar_fact()

Empleado

-id

-horas_extra

-tel

+leer_empleado()

+visualizar_empleado()

+enviar _sal();

Proveedor

-cod_vendedor

-saldo

-fax

-tel

-descuento

+leer_provedor()

+visualizar_provedor()

+pagar_fact()

Java

C++

Figura c)

Page 69: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Concepto de modularidad

Page 70: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 71: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Programa Persona_empleado

Page 72: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 73: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 74: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejemplo 1

Page 75: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 76: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 77: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejercicio 1

Page 78: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejercicio 2

Page 79: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 80: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

3.4 Relaciones entre clases

Page 81: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

3.5 Clases y métodos genéricos

Page 82: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Métodos inlineComo cualquier otra función en C++, las funciones miembro pueden ser inline. Hay

dos formas para hacer que una función miembro sea inline.

Page 83: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

La declaración de una función en línea es una solicitud al compilador. Si el

compilador considera que la función es demasiado complicada, bien por su tamaño

o por contar con una estructura compleja, la tratará como si fuera una función

ordinaria. Estas funciones alcanzan su mayor funcionalidad y sentido cuando se

trata de funciones muy cortas.

Sólo se puede utilizar una función en línea en el archivo en que está definida. La

razón es que el compilador necesita la definición completa de la función para poder

insertar el cuerpo de la misma siempre que se llame. Por este motivo si se utiliza unfichero cabecera para declarar una clase, y dicha clase contiene funciones miembroinline, éstas deben definirse en el mismo archivo cabecera.

Page 84: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejemplo de función inline

Page 85: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Funciones miembro que retornan una referencia.

En ocasiones se pueden ver clases en C++ que declaran funciones miembro que

retornan referencias a miembros dato privados, por lo que los están convirtiendo en

públicos. Esto se considera una mala técnica de programación porque viola el

encapsulamiento

Page 86: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 87: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Objetos y funciones miembro constantes

De la misma manera que se utiliza la palabra reservada const cuando se declara una

variable, se puede usar para la declaración de un objeto. Tal declaración significa que el

objeto es una constante y ninguno de los datos miembro podrá ser modificado. Por

ejemplo:const Fecha nacimiento(9, 7, 1971);

La declaración anterior significa que los atributos del objeto nacimiento de la clase

Fecha no pueden ser modificados.

Page 88: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 89: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Miembros estáticos

Atributos estáticos

Cada vez que se define un objeto a partir de una clase concreta los elementos de

datos se duplican. Es decir, los atributos de diferentes instancias de objetos de la

misma clase son independientes y ocupan posiciones diferentes de memoria. Si se

desea que todos los objetos instanciados de una clase compartan una sola copia de

un atributo, se puede definir el atributo como static. Esto se puede utilizar como una

forma de comunicación entre los objetos.

Se puede declarar private, y sólo podrán acceder a él las funciones miembro, o

public con lo que será accesible al resto del programa.

Un ejemplo de un miembro estático privado puede ser:class Cuenta {

char nombre[50];

float total;

static float incremento;

public:

Cuenta ();

void Interes() { total += incremento*total;}

};

Page 90: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

En el ejemplo anterior sólo existe una copia de incremento, y es accesible por

todas las instancias de la clase Cuenta. Cada vez que se llame al método Interes

por cualquier objeto de la clase Cuenta, se empleará el mismo valor de

incremento, compartido por todas las instancias. La siguiente figura ilustra este

ejemplo

suponiendo que se han definido tres objetos. Se observa como incremento es un

miembro común a los tres objetos.

Por ejemplo, si incremento fuera un miembro público, se podría acceder a él de la

siguiente manera:// Si incremento fuera públicovoid main () {

Cuenta::incremento=0.000154;}

Page 91: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 92: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Métodos estáticos

Si se tienen funciones miembro que sólo acceden a datos miembro estáticos de

una clase, se pueden declarar éstas como static también. Como ejemplo se va a

modificar la clase cuenta que se introdujo en el apartado anterior.class Cuenta {

char nombre[50];

float total;

static float incremento;

public:

Cuenta ();

void Interes() { total += incremento*total;}

static void ActualizaIncremento( float valor)

{incremento=valor;}

};

Las funciones miembro estáticas se llaman con la misma sintaxis que se usa para

acceder a los datos miembro estáticos, es decir es utilizando directamente el

nombre de la clase:void main (void) {

Cuenta micuenta;

Cuenta::ActualizaIncremento (0.016);

micuenta.ActualizaIncremento (0.016);

}

Page 93: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Una función miembro, estática o no, puede manejar variables globales. En el

siguiente ejemplo se muestra el manejo desde una función miembro estática.

Page 94: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Matrices de objetos

Se pueden declarar matrices de objetos de la misma manera que se declaran

de cualquier otro tipo de datos.

Page 95: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Sólo se han iniciado explícitamente los elementos 0 y 1 de colonia. Para el resto se

habrá utilizado el constructor por defecto para la clase Hormiga

Ejemplo:Hormiga colonia[10] = { Hormiga(4,1), Hormiga(6,1) };

Si la clase tiene un constructor con un solo parámetro, se puede especificar el

argumento como valor inicial de un elemento. Se pueden mezclar diferentes

estilos de iniciación.

Page 96: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Object Array (1)

Page 97: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Object Array(2)

Page 98: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Introducción a las plantillas

Los tipos genéricos o parametrizados, también llamados plantillas,permiten construir una familia de clases relacionadas, diferenciándose entresí en el tipo de los datos que manipulan; esto es, son un mecanismo de C++que. permite que un tipo pueda ser utilizado como parámetro en ladefinición de una clase

En lugar de desarrollar, por ejemplo, una clase PilaEnt para enteros yotra PilaLong para enteros largos, podemos desarrollar una clase genérica oplantilla, Pila, que sirva para esos y otros casos, en el fichero Stack.h:

Page 99: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

La palabra clave template

C++ utiliza una palabra clave específica template para declarar y definirfunciones y clases genéricas. En estos casos actúa como unespecificador de tipo y va unido al par de ángulos < > que delimitan losargumentos de la plantilla:

template void fun(T& ref); // función genérica

template class C {/*...*/}; // clase genérica

Page 100: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Funciones genéricas

Solución:

#define min(a,b)(((a)<(b)) ?(a):(b))

Double x=26.4, y 26.1

Cout <<min(x,y)<<endl;Int min(int a, int b)

{

return(a<b)?a:b

}

Page 101: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 102: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 103: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Para ilustrarlo veremos la clase mVector. Los objetos mVector son matrices cuyos elementos son objetos de la clase Vector; que a su vez representan vectores de un espacio de dos dimensiones.

Page 104: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Definición de una clase genérica

La definición de una clase genérica tiene el siguiente aspecto:

template class nombreClase { ... };

Una clase genérica puede tener una declaración adelantada (forward) para ser declarada después:

Page 105: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Observe que aparte del cambio de la declaración, se han sustituido las ocurrencias de Vector (un tipo concreto) por el parámetro T. Observe también la definición de mostrar() que se realiza off-line con la sintaxis de una función genérica. Recordemos que en estas expresiones, el especificador class puede ser sustituido por typename , de forma que la primera línea puede ser sustituida por:

Page 106: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 107: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 108: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 109: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 110: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Ejercicio o practica

Page 111: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Los compiladores necesitan que la plantilla completa -declaración de la clase y definiciones de los

métodos- se encuentre en un único fichero .h -sin .cpp-.La definición de la clase va precedida de la especificación de plantilla:

template<class Tipo> class Stack {

...

}

La implementación de una función miembro fuera de la clase debe ir precedida de la especificación de

plantilla y el nombre de la función debe ir cualificado con el nombre genérico de la clase -el nombre

seguido del tipo genérico entre ángulos-:template<class Tipo>

void Stack<Tipo>::push(Tipo dato) {

...

}

Una vez creada la clase genérica, podemos crear un ejemplar concreto indicando entre ángulos el tipo

particular que se desea que utilice la clase:Stack<int> pila1;

Stack<long int> pila2;

Stack<Persona> pila3;

Page 112: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados
Page 113: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Las plantillas también pueden tener definidos parámetros que no sean tipos, sino valores. Por ejemplo, para

crear una clase Lista genérica puede ser necesario indicar el tamaño deseado. También en la definición dedicha lista genérica se pueden indicar valores por defecto. Así, nuestro fichero Lista.h sería:

Page 114: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Métodos genéricos

Hemos señalado que, por su propia naturaleza, los métodos de clasesgenéricas son a su vez (implícitamente) funciones genéricas con losmismos parámetros que la clase, pero pueden ser además funcionesgenéricas explícitas (que dependan de parámetros distintos de laplantilla a que pertenecen):

Page 115: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Según es usual, la definición del miembro genérico puede efectuarse de dos formas, inline u off-line:

Page 116: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Crear e implementar un programa que cree un arreglo de 3 objetos (complejos) y realice las operaciones suma y resta

Trabajo de clase

Page 117: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

super

1. Invoca a un método de la superclase

2. Invoca a un constructor de la superclase

Solo puede aparecer como primera

sentencia de otro constructor

super

Page 118: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

El Objeto this

Permite acceder al objeto actual cuyo comportamiento se está definiendo. Es un apuntador a

una clase usado dentro de cualquier método de dicha clase

Page 119: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Caso 1 de this

Page 120: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Caso 2 de this

Page 121: Lenguaje de Programación Orientado a Objetoshilario_sm/slide/Programacion_2/Unidad III.pdf · apuntadores o punteros en c++. ... “Losoperadores relacionales, también denominados

Bibliografía

• http://www.grch.com.ar/docs/unlu.poo/Clases-objetos%20C++.pdf• http://www.udb.edu.sv/udb/archivo/guia/informatica-ingenieria/programacion-

ii/2013/i/guia-9.pdf• http://burningbytecodes.blogspot.com/2014/08/c-poo-plantillas-y-excepciones.html• http://www.elai.upm.es/moodle/pluginfile.php/2298/mod_resource/content/1/Tema

6_libroC%2B%2B2013.pdf