introducción poo

42
Universidad Centroccidental “Lisandro Alvarado” Decanato de Ciencias y Tecnología Lapso 2010-2 Introducción a la Programación Orientada a Objetos (P con C++ Programa de Análisis de Sistemas Coordinación del Área de Computación

Upload: gtorrealba

Post on 29-Jun-2015

1.434 views

Category:

Education


0 download

DESCRIPTION

Guía para el aprendizaje de la Programación Orientada a Objetos

TRANSCRIPT

Page 1: Introducción poo

1

Universidad Centroccidental “Lisandro Alvarado”

Decanato de Ciencias y TecnologíaLapso 2010-2

Introducción a la

Programación Orientada a Objetos (POO)

con C++

Programa de Análisis de SistemasCoordinación del Área de Computación

Page 2: Introducción poo

2

Programación de Funciones

Una función contiene una o más sentencias y se crean generalmente para realizar una única tarea.En la Programación Orientada a Objetos, las funciones se utilizan para definir los métodos de las clases.

Todos los lenguajes de programación ofrecen innumerables funciones que ya están

programadas, y también la posibilidad de crear nuevas por parte del programador. A estas se les denomina Funciones Definidas por el

Usuario, considerándote a ti como usuario del Lenguaje (programador).

Page 3: Introducción poo

3

Programación de Funciones

Implementación de una Función:tipo_de_retorno NombreFuncion (lista parámetros){ sentencias return valor;}

Cuando en el tipo de retorno aparece la palabra reservada void significa que la función no retorna ningún valor.void NombreFuncion (lista parámetros){ sentencias .....}

Usualmente se les denomina Procedimientos a las funciones que no

retornan ningún valor

Page 4: Introducción poo

4

Parámetros de una función

• También se conocen como Argumentos.• Una función puede utilizar parámetros por

valor y parámetros por referencia, o puede no tener parámetros.

• TIPOS DE ARGUMENTOS SEGÚN• EL VALOR QUE RETORNAN

Párametros por valor: En C++ el paso por valor significa que al compilar la función y el código que llama a la función, ésta recibe una copia de los valores de los parámetros que se le pasan como argumentos. Las variables reales no se pasan a la función, sólo copias de su valor.

Page 5: Introducción poo

5

Tipos de parámetros según lo que retornan

Según el valor que puede retornar un argumento, los parámetros se clasifican en parámetros por valor o por

referencia

COMPARACIÓN ENTRE PARÁMETROS POR VALOR Y POR REFERENCIA

ComparaciónTipo

parámetroPor valor Por referencia

Cómo identificarlos Se declaran sin & Se declaran con &

Qué recibe la funciónCopia de los valores de los argumentos que se

pasan

El mismo valor que el argumento que se pasa

(la misma dirección)Cómo se afecta el parámetro que se

envía

No cambia el valor del argumento original

El cambio es retornado al argumento original

Entrada y/o salida Solo de entrada Son de entrada y salida

Page 6: Introducción poo

6

Tipos de parámetros según su ubicación

Tanto en la definición (cabecera) de la función como en las llamadas deben colocarse parámetros:

• Parámetros formales: están en la definición de la función (cabecera).

• Parámetros actuales: están en cada llamada a una función.

COMPATIBILIDAD ENTRE PARÁMETROS FORMALES Y PARÁMETROS ACTUALES

ReglaCompatibilidad Debe cumplir con lo siguiente

Misma cantidadPara N parámetros formales deben haber N

parámetros actuales. Ej: si hay 3 parámetros en los formales, deben haber 3 en los actuales

Mismo tipoDeben ser parámetros del mismo tipo. Ej: Si en los formales hay un char y un int, igualmente deben haber un char y un int en los actuales

Mismo orden

Deben estar en el mismo orden. Ej: si en los formales hay un char y un int, y en los actuales

hay un int y un char, ambos pares de parámetros tienen el mismo tipo pero no están

en el mismo orden.

Page 7: Introducción poo

7

Ejemplos de funciones

Ejemplo de una Función con parámetros

void ImprimirMensaje (string mensaje) { cout << mensaje << endl;}

Llamado de la función ImprimirMensaje ImprimirMensaje (“Ingrese los siguientes datos:”);

Parámetros formales

de la función

Parámetros actuales de la

función

Ejemplo de Funciones sin parámetros

void LimpiarPantalla () { system (“cls”);}void DetenerPantalla () { system (“pause”);}

Igual se colocan paréntesis que abre y cierra (sin

argumentos)

Funciones que no

ameritan argumento

s

Llamado de las funciones anterioresLimpiarPantalla ();DetenerPantalla ();

Page 8: Introducción poo

8

Programación Orientada a Objetos (POO)

Conceptualización• Es un paradigma de programación que usa objetos y sus

interacciones, para diseñar aplicaciones y programas de computadora.

• Es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real.

• Se basa en la idea natural de la existencia de un mundo lleno de objetos, de modo que la resolución del problema se realiza en términos de objetos.Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro, sino que cada uno tiene sus ventajas y sus inconvenientes.

También hay situaciones donde un paradigma resulta más apropiado que otro, e incluso pueden usarse de manera

combinada.

Otros paradigmas de Programación:

• Programación Estructurada o por Procedimientos.

• Funcional.

• Lógico.

• Visual

Page 9: Introducción poo

9

Clases, Instancias y Objetos

Clase: Representa un dato de tipo objeto, es su definición, no puede tomar valores ni ejecutar métodos.Instancia: Un ejemplar de una clase. Una variable de algún tipo de objeto.Objeto: Un objeto es una Instancia de una Clase. Un objeto en POO, representa alguna entidad de la vida real, es decir, alguno de los objetos que pertenecen al negocio con que estamos trabajando o al problema con el que nos estamos enfrentandoCOMPARACIÓN ENTRE CLASES, INSTANCIAS Y OBJETOS

ElementoEntorno Si para variables es Para POO es

Declaración Un tipo de dato Una ClaseNombre del dato Una variable Un Objeto o Instancia

Las clases son a los objetos como lo son los tipos de datos a las variables. Es decir, los tipos de datos definen el tipo de contenido que tendrán las variables, las clases definen la estructura de los

objetos

Page 10: Introducción poo

10

Composición de los Objetos

Un Objeto en POO es cualquier cosa tangible o no, la cual se describe sobre la base de sus datos o propiedades (atributos) y

funciones (métodos) que definen su comportamiento.

Los atributos y métodos que están asociados se dicen que están encapsulados en una única entidad (Encapsulación). Los métodos dentro del objeto deben ser el único medio de acceder a los datos

privados de ese objeto (Ocultación).

• Un método es un conjunto de instrucciones que realizan una determinada tarea y son similares a las funciones de los lenguajes estructurados.

Los atributos pueden tomar un valor. Ejemplo de atributos: Edad, Color, Peso. Suma, etc. Si piensas que Sumar pudiera ser un

atributo, te equivocas. Fíjate: Sumar indica una acción y no un dato. Seguramente Sumar será un proceso que calcula el

atributo Suma.

• Un atributo es una característica individual que diferencia un objeto de otro y determinan su apariencia, estado u otras cualidades.

Ahora sí podemos usar Sumar, ya que indica una acción (comportamiento) el cual será el cálculo del atributo Suma.

Page 11: Introducción poo

11

Ejemplos de Objetos

Métodos:- Llamar- Contestar- Encender- GuardarNro

Atributos:- Tipo- Numero- Operadora- Modelo

Fíjate que a cada uno de los atributos es posible asignarle un valor. Ej: Tipo=Celular, Numero=0414-123.45.67,

Operadora=Cantv, Modelo=Samsung. Por su parte, los métodos denotan alguna acción con el celular.

Un Teléfono en términos de objetos

Métodos:- Abrir- Depositar- Retirar- Cerrar

Atributos:- NumeroCta- Titular- FechaApertura - SaldoActual

Observa que una cuenta bancaria es un objeto intangible, una forma de representarla es con una libreta de ahorros. Otro ejemplo: si te piden calcular el promedio de 3 números, tendremos un objeto

que llamaríamos Calculo.

Una Cuenta Bancaria en términos de objetos

Page 12: Introducción poo

12

Lenguajes Orientados a Objetos

En la actualidad la mayoría de los lenguajes de programación admiten la Programación Orientada a Objetos. Un lenguaje de

programación orientado a objetos es aquel que admite el paradigma de la POO.

En este curso programarás con C++ y el entorno de desarrollo integrado (IDE) Dev-C++, el cual te ofrece una interfaz de fácil operación que te permite:• Escribir los programas• Compilarlos• Ejecutarlos• Depurarlos

Otros lenguajes que admiten objetos son los siguientes:• Object Pascal, y el entorno Borland Delphi• Java, con el entorno NetBeans• Basic, con el entorno Microsoft Visual Basic• XBase, con el entorno Microsoft Visual FoxPro

Page 13: Introducción poo

13

Lenguajes Orientados a Objetos

Observa en la siguiente ilustración el aspecto de la IDE con la que trabajarás en este curso.

IDE DEVC++, PARA EL LENGUAJ E ORIENTADO A OBJ ETOS C++

BARRAS DE HERRAMIENTAS que te permiten múltiples acciones:

compilar, ejecutar, etc.

EXPLORADOR DE OBJ ETOS que conforman tu proyecto.

EL CÓDI GO DE CADA OBJ ETO organizados en pestañas.

DEPURADOR DE PROGRAMAS para que pruebes y corrijas.

PODEROSO EDI TOR que te facilita la escritura de tus programas.

Page 14: Introducción poo

14

Pilares de la Programación Orientados a Objetos

Page 15: Introducción poo

15

Abstracción

i) El proceso para calcular el promedio de 3 números puede explicarse así: “sumamos los números y dividimos entre 3”.

ii) Cuando vamos a programarlo, tenemos que: a- Declarar variables, b- mostrar un mensaje en pantalla para pedir cada número, c- leer los números, d- asignarlos la suma a una variable Total, e- Dividir el

total entre 3 y asignarlo a la variable Promedio, f - Mostrar un mensaje en pantalla indicando que se presentará el resultado, g-

Mostrar la variable Promedio.

iii) ¿Puedes ver cómo el punto (i) “ignora” una serie de pasos y se “concentra” en el proceso mismo?

iv) El punto (ii) es más bien el “cómo se hace”, mientras el punto (i) es el “qué hace”

• La abstracción consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan.

• En programación, el término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (Característica de caja negra).

• Ejemplificación de la Abstracción:

Page 16: Introducción poo

16

Encapsulamiento

Se denomina encapsulamiento al ocultamiento del estado de los componentes de un objeto, de manera que sólo se pueden cambiar mediante las operaciones definidas para ese objeto

La mejor f orma de comprender el encapsulamiento es imaginar que todo objeto tiene un número determinado de “acciones” o

comportamientos, cada uno de los cuales se “activa” pulsando un botón. Cada botón le envía el mensaje al objeto para que procese y cambie sus atributos dentro de su “caja negra”. Más adelante en este curso veremos cómo para cada requerimiento de un objeto

tendremos que programarle un “botón”; finalmente, usar el objeto (correr el programa) consistirá en pisar los botones necesarios.

Page 17: Introducción poo

17

Herencia

La herencia es el mecanismo fundamental para implementar la reutilización y extensibilidad del software. A través de ella los diseñadores pueden construir nuevas clases partiendo de una jerarquía de clases ya existente (comprobadas y verificadas) evitando con ello el rediseño, la remodificación y verificación de la parte ya implementada

Jerarquía de clases de transportes

Page 18: Introducción poo

18

Polimorfismo

El polimorfismo se refiere a la posibilidad de definir en una jerarquía de clases métodos y/o atributos denominados de forma idéntica, pero que se comportan de manera distinta

PARA CADA CLASE DERIVADA también cuenta BsEnBanco PARA ESTUDIANTE hay que sumarle Computador y Celular PARA PROFESOR hay que sumarle Carro y Casa

EL TOTALCAPI TAL para las clases

derivadas tendrá algunas variantes

Clase Estudiante - ValorComputador - ValorCelular - TotalCapital

LA CLASE BASE Persona con sus componentes (Propiedades: Nombre, Cedula, BsEfectivo, BsDebe, Comportamiento: cálculos de Totales)

DEMOSTRACIÓN DE UN CASO DE POLIMORFISMO

Clase Persona - Nombre - Cédula - BsEfectivo - BsDebe - TotalCapital - TotalDeudas - TotalPatrimonio

Clase Profesor - ValorCarro - ValorCasa - TotalCapital

ASUMIREMOS de la manera más elemental, que el TotalCapital de cualquier persona es el dinero en efectivo que tiene, y

TotalDeudas es lo que debe en efectivo; así, TotalPatrimonio es la diferencia entre los totales anteriores

CON ESTAS FLECHAS queremos denotar que hay una herencia entre las clases señaladas

UN PROFESOR es una persona; componentes adicionales: ValorCarro y ValorCasa

UN ESTUDI ANTE es una persona; componentes

adicionales: ValorCelular y ValorComputador

Page 19: Introducción poo

19

Identificación de Objetos

Una técnica a seguir para lograr la identificación de los objetos es subrayar cada sustantivo (nombre) presente en el planteamiento del problema. Ej:• Hacer un programa que permita leer las operaciones

realizadas a una cuenta bancaria y determinar al final el saldo de la misma.

• Se desea determinar la nota final de un estudiante sabiendo que presentó 3 pruebas parciales.

• En una organización laboran varios trabajadores que tienen un sueldo base, asignaciones y deducciones. Se desea determinar el sueldo neto de cada trabajador.Algunos criterios a seguir para identificar los

objetos son:• Cosas tangibles (mesa, carro, avión). • Organizaciones (empresa, departamentos, divisiones) • Incidentes (representa un suceso, Ej: vuelo, inscripción,

transacción). • Papeles o roles (cliente, empleado, médico).• Interacciones (compras, ventas). • Lugares (ciudad, muelle de carga, sala de embarque).

Page 20: Introducción poo

20

Identificación de Objetos

Considere lo siguiente al momento de identificar los objetos que participan en un planteamiento:• Posiblemente subrayarás múltiples sustantivos, no todos tendrás

que usarlos en tu programa.• Inicialmente cuando haces el subrayado, lo que tienes es varias

objetos candidatos (candidatos a ser el objeto que usarás).• Producto de un análisis más detallado terminarás determinando

cual (o cuales) objetos serán los definitivos.• Los objetos que determinas que no usarás simplemente forman

parte de la redacción del enunciado, pero no de la solución del problema. De alguna manera u otra estos objetos que no usarás te servirán para comprender la información que te suministra el planteamiento.

En una organización laboran varios trabajadores que tienen un sueldo base, asignaciones y deducciones. Se desea determinar el sueldo neto de cada trabajador y el total a pagar por la empresa.

I DENTI FICACI ÓN DE OBJ ETOS Y SUS COMPONENTES

I NFORMACIÓN DE ENTRADA: sueldo base, asignaciones, deducciones

OBJ ETOS CANDIDATOS: organización, trabajadores, trabajador, empresa

REQUERIMIENTOS: determinar el sueldo neto de cada trabajador

I MPORTANTE: en ocasiones la información de entrada está implícita

Page 21: Introducción poo

21

Ejemplificación de Requerimientos

La forma más inequívoca de expresar los requerimientos es con la formulación de al menos una situación que ejemplifique lo que se necesita. Ejemplificar requerimientos es en programación de computadoras similar a: • Una maqueta de un centro comercial, presentada por un

arquitecto.• La radiografía de un hueso roto que muestra un doctor.• El dibujo de un vestido que presenta un diseñador.• Una tabla con la información de sueldos de los trabajadores de la

organizaciónNota que todas las situaciones mencionadas presentan

visualmente lo requerido por parte de un cliente:• Construir un Centro Comercial, que es requerido por un

inversionista con mucho dinero que no sabe nada de Ingeniería Civil.

• Enyesar un brazo, que es requerido por una persona herida.• Elaborar un vestido, que es requerido por la novia que va a

casarse.• Hacer un programa que determine el sueldo neto de cada

trabajador y el total a pagar por la empresa.

Lo más común en el planteamiento de problemas de programación es que te enfrentes a un texto con la redacción de requerimientos, o sea un montón de palabras. Cuando se hace

la ejemplificación de lo requerido, logras una completa comunicación con el cliente y lo que necesita.

Page 22: Introducción poo

22

Ejemplificación de Requerimientos

El planteamiento de problemas de programación seguramente no contará con todo detalle, tendrás que abordar al cliente y

lograr mayores especificaciones a fin de que puedas crear una EJEMPLIFICACIÓN CON LA QUE ESTÉN AMBOS EN

ACUERDO.

I DENTIFI CACI ÓN DE OBJ ETOS Y MIEMBROS POR EJ EMPLIFI CACI ÓN TABULADA

TODA LA TABLA representa la información del objeto Organización

CADA REGISTRO muestra la información de un objeto trabajador

LOS DATOS DE ENTRADA por columnas serán

atributos del trabajador

CÁLCULOS POR REGISTRO serán métodos del

trabajador

CÁLCULOS TOTALES DE LA

TABLA serán métodos de la organización

DATOS GENERALES DE ENTRADA serían atributos de la organización. Para este ejemplo, podría ser el total

que dispone la empresa para pagar sueldos. Así, si se pide el restante luego del pago, tendríamos otro

método para organización: TOTALRESTANTE.

Page 23: Introducción poo

23

El control remoto de los objetos

Otra técnica para identificar los componentes de los objetos es precisamente imaginarlos como un aparato (o robot) que opera con un control remoto, donde:• El aparato tiene componentes internos, que tal vez no sea

preciso visualizarlos en primera instancia (están encapsulados). Estos componentes internos serán los atributos y métodos.

• También tiene botones, cada uno de los cuales permitirá resolver un requerimiento del problema.

• Cuando presionamos los botones, según necesitemos, el objeto realizará algunas acciones (procesos) que alterarán los atributos, o bien nos mostrarán el resultado de lo que deseamos hacer.

• Los botones servirán entonces tanto para que veamos el funcionamiento de nuestro programa, como para que los objetos que lo conforman se comuniquen entre sí.

Page 24: Introducción poo

24

El control remoto de los objetos

Más nubes

Cambiar turno

Cambiar turno

Mostrar Sol

Arco Iris

Llover

Agregar trabajador

Mostrar sueldo neto

Agregar trabajador

Totalizar empresa

Agregar trabajador Agregar trabajador

CAMBIAR TURNO

LLOVER

MOSTRAR SOL

MOSTRAR LUNA

MÁS NUBES

ARCO I RIS

Page 25: Introducción poo

25

Representación de Clases

FECHA

- dia : int - mes : int - anno : int

+ Fecha () + Fecha (d:int, m:int, a:int) + SetDia (d:int) + SetMes (d:int) + SetAnno (d:int) + GetDia () :int + GetMes () :int + GetAnno () :int

NOMBRE DEL OBJ ETO

PRIVADO (- )

PÚBLI CO (+)

PROTEGIDO (#)

ATRIBUTOS

OPERACIONES

(MÉTODOS)

REPRESENTACIÓN DE UNA CLASE SEGÚN LA NOTACI ÓN UML

Visibilidad <nombre>: tipo [= valor inicial]

Privado (-), público (+), protegido (#) Nombre del atributo

Tipo de dato del atributo El valor inicial es opcional

SI NTAXI S PARA REPRESENTAR LOS ATRI BUTOS EN LA CLASE, SEGÚN UML

visibilidad nombre ([lista de parámetros]): tipo retorno

Privado (-), público (+), protegido (#) Nombre del atributo

Argumentos del método (opcionales). Los paréntesis SI EMPRE debes colocarlos.

El tipo de valor que retorna

SINTAXIS PARA REPRESENTAR LOS MÉTODOS EN LA CLASE, SEGÚN UML

Page 26: Introducción poo

26

Representación de Clases

Organización

- ArrayTrabajadores : vector - BsDisponeParaSueldos : float

- SetBsDisponeParaSueldos (Bs : float) - GetBsDisponeParaSueldos () : float - I ncluirTrabajador (Nomb...) - GetTotalNomina () : float ::::::::::::

Trabajador

- Nombre : string - SueldoBase : float - Asignaciones : float - Deducciones : float

- Sets... - Gets... - CalcularSueldoNeto () : float ::::::::::::

1 1..*

En este caso la relación se llama composición, ya que la organización está compuesta por varios

trabajadores. Los números indican: una organización tiene al menos 1 trabajador (1..*), pero un trabajador

siempre pertenece a una organización

El diagrama de clases muestra todas las clases que participan en

la solución del problema y las relaciones entre ellas.

DI AGRAMA DE CLASES (INCOMPLETO) DEL EJ ERCICI O DE LA ORGANIZACIÓN

Page 27: Introducción poo

27

Objetos en C++

Un Programa Orientado a Objetos en C++, está compuesto por:

• Varias librerías de uso genérico, bien sean incorporadas al lenguaje o programadas por el usuario.

• Una carpeta en el disco duro (o pendrive) con el nombre del proyecto.

• Clases propias para el programa. Cada clase se almacena en 2 archivos: uno para la interfaz (extensión .h) y otro para la implementación (extensión .cpp). Estos archivos van dentro de la carpeta del proyecto

Cada clase que se diseña tendrá 2 partes:

• La interfaz: contiene solamente la declaración de los componentes de la clase, siguiendo la sintaxis de C++.

• La implementación: contiene la programación de los métodos de la claseNuestro ejemplo de la organización requerirá al menos 5

archivos: Organización.h, Organización.cpp, Trabajador.h, Trabajador.cpp y Principal.cpp

Page 28: Introducción poo

28

Objetos en C++: Interfaz de Clase

#ifndef <NombreArchivo_H>#define <NombreArchivo_H>#include <NombreLibreria>[#include <NombreLibreria> [...]]class <nombreClase> { <componentes>};#include “NombreArchivo.cpp”#endifComponentes de tipo atributo=[private:|public:|protected:] <TipoCampo> <NombreCampo>; [<TipoCampo> <NombreCampo>; [...]]Componentes de tipo método=[private:|public:|protected:] <TipoDevuelto> <NombreMétodo> ([<parametros>]); [<TipoDevuelto> <NombreMétodo> ([<parametros>]); [...]]

Sintaxis para la programación de la interfaz de una clase

Proy-Empresa\ Trabajador.h

#ifndef TRABAJADOR_H #define TRABAJADOR_H #include <string> class trabajador { private: float sueldo_base, asignaciones, deducciones; public: // Acá se omiten algunas líneas que veremos más adelante float CalcularSueldoNeto (); }; #include "Trabajador.cpp" #endif

I NTERFAZ DE LA CLASE TRABAJ ADOR

Busca la carpeta Proy-Empresa en nuestro Banco de Ejercicios. Observa la siguiente interfaz para la clase

trabajador de nuestro ejemplo; el archivo respectivo se llamará Trabajador.h, dentro de la carpeta Proy-Empresa. Se han omitido

algunas instrucciones que se explicarán luego.

Page 29: Introducción poo

29

Objetos en C++: Implementación de Clase

<nombreClase> :: <NombreMetodo> { <sentencias> } [<nombreClase> :: <NombreMetodo> { <sentencias> } [...]] <sentencias> = una sentencia simple o un bloque de instrucciones

SINTAXIS PARA LA PROGRAMACIÓN DE LA IMPLEMENTACIÓN DE UNA CLASE

Proy-Empresa\ Trabajador.cpp

// Acá se omiten algunas líneas que veremos más adelante float trabajador :: CalcularSueldoNeto () { return sueldo_base + asignaciones - deducciones; }

I MPLEMENTACIÓN DE LA CLASE TRABAJ ADOR

Faltan las líneas para: el constructor, los Sets y los Gets, lo cual se explicará más adelante

Busca la carpeta Proy-Empresa en nuestro Banco de Ejercicios. Observa la siguiente implementación para la clase

trabajador de nuestro ejemplo; el archivo respectivo se llamará Trabajador.cpp, dentro de la carpeta Proy-Empresa. Se han omitido

algunas instrucciones que se explicarán luego.

Page 30: Introducción poo

30

Objetos en C++: El Programa Principal

[#include <<LibsDeC++>>] [#include <“LibsPropias”>] using namespace std; int main () { <sentencias> } <sentencias> = una sentencia simple o un bloque de instrucciones

SINTAXIS PARA LA PROGRAMACIÓN DEL PROGRAMA PRI NCIPAL

Proy-Empresa\ Principal.cpp

#include <iostream> #include "Trabajador.h" using namespace std; int main () { float sueldo, asig, deduc; cout << "Introduzca sueldo base: "; cin >> sueldo; cout << "Introduzca asignaciones: "; cin >> asig; cout << "Introduzca deducciones: "; cin >> deduc; trabajador t (sueldo, asig, deduc); // Creación de la instancia cout << "El sueldo neto es: " << t.CalcularSueldoNeto () << "\n"; system("PAUSE"); }

I MPLEMENTACIÓN DEL PROGRAMA PRINCIPAL

Busca la carpeta Proy-Empresa en nuestro Banco de Ejercicios. Observa el programa principal de nuestro

ejemplo; el archivo respectivo se llamará Principal.cpp, dentro de la carpeta Proy-Empresa.

Observa la línea con el comentario de creación de la instancia, es en ese momento (cuando se especifica que se creará un objeto del tipo trabajador) cuando el programa en ejecución destinará espacios de memoria para la creación del objeto. Es en ese momento cuando se ejecuta el constructor respectivo a los argumentos enviados (verás

la explicación más adelante).

Page 31: Introducción poo

31

Objetos en C++: ConstructoresEs un método especial que se ejecuta automáticamente al momento de la creación de un objeto; su propósito es la inicialización de los atributos del objeto, bien sea con valores predefinidos o con valores que se “pasan” al objeto a través de parámetros.

Consideraciones:• Se denominan exactamente igual que la clase.• Pueden haber varios constructores en una clase, con la

diferenciación entre ellos de los argumentos que reciben (sobrecarga de métodos).

• Para efectos de este curso, principalmente se usarán 2 constructores: (valores predeterminados, y otro que recibe los argumentos de inicialización).

• En la interfaz de la clase, solamente colocarás al encabezado.• En la implementación, entonces declaras la implementación.• En caso de que sea un constructor de inicialización

predeterminada, colocarás valores base.La sobrecarga de métodos y/o funciones es una cualidad de los lenguajes de programación que permite la definición de métodos / funciones con el mismo

nombre pero con diferentes argumentos; el programador, al momento de necesitar el método / función, decidirá cuales argumentos enviar, y de esta manera, casando

la cantidad, tipos y orden de los argumentos, el compilador identifica cual es la implementación respectiva.

Page 32: Introducción poo

32

Objetos en C++: Setters (Sets) y Getters (Gets)

•La función Set es un método que nos permite modificar el valor (asignar) de una variable privada (atributo) de una clase.

•La función Get es un método que nos permite visualizar el valor de una variable privada (atributo) de una clase, en otras palabras provee el valor del atributo a quien lo solicite.

Considera lo siguiente en relación a los Sets y Gets:•Por cada atributo debería existir un Set y un Get.•Con frecuencia podrás solamente implementar los Sets y Gets de los atributos que necesites para resolver el problema que se te plantea. Queda a discreción del profesor si te permite esto.

•Los Sets constituyen un método cuya única función será asignarle un valor a un atributo en particular, el cual viene por parámetro. Dado que no tiene que retornar valor, los Sets son procedimientos, o funciones void.

•Los Gets son métodos que se invocarán para que retornen el valor de una atributo en particular, de manera que el tipo de retorno de cada Get dependerá del tipo del atributo que retorna.

Page 33: Introducción poo

33

Objetos en C++

::: class trabajador { private: float sueldo_base, asignaciones, deducciones; public: // Este es el constructor predeterminado trabajador (); // Este es el constructor de inicialización trabajador (float, float, float); void SetSueldo_Base (float); void SetAsignaciones (float); void SetDeducciones (float); float GetSueldo_Base (); float GetAsignaciones (); float GetDeducciones (); float DetSueldoNeto (); }; :::

Proy-Empresa\ Trabajador.h I NTERFAZ DE LA CLASE TRABAJ ADOR

Constructor predeterminado

Constructor de inicialización

Sets (Setters)

Gets (Getters)

Métodos de requerimientos

Se omitieron las directivas #ifndef , #include, etc

trabajador :: trabajador (){ sueldo_base = asignaciones = deducciones = 0; } trabajador :: trabajador (float sb, float a, float d){ sueldo_base = sb; asignaciones = a; deducciones = d; } void trabajador :: SetSueldo_Base (float sb){ sueldo_base = sb; } ::: float trabajador :: GetSueldo_Base (){ return sueldo_base; } ::: float trabajador :: DetSueldoNeto () { return sueldo_base + asignaciones - deducciones; }

Proy-Empresa\ Trabajador.cpp I MPLEMENTACI ÓN DE LA CLASE TRABAJ ADOR

Constructor predet

Constructor de inicialización

Sets (Setters)

Gets (Getters)

Métodos de requerimientos

Se omitieron algunos Sets y Gets... su implementación es similar

Page 34: Introducción poo

34

Integración de componentes con DevC++

Vea depuración en ¡Error! No se encuentra el origen de la referencia., pág ¡Error! Marcador no definido.

I NTEGRACI ÓN DE COMPONENTES DEL PROYECTO

Pestaña que lleva al contenido del archivo Principal.cpp

Pestaña que lleva al contenido del archivo Trabajador.h

Pestaña que lleva al contenido del archivo

Trabajador.cpp

En el proyecto se agregan: el archivo principal y todas las

interfaces de clases (.h); las implementaciones

(.cpp) no deben agregarse ya que se producen

errores de compilación.

PARA ACCEDER AL .CPP: abra la interf az de la clase respectiva, mantenga presionada la tecla

Ctrl y haga clic en el #include del .cpp

La interfaz de desarrollo integrado (I DE) de DevC++ te permite:

Escribir los programas Compilarlos y ejecutarlos Crear el programa ejecutable Probarlos y depurarlos

BARRA DE HERRAMIENTAS EN LA IDE DE DEVC++ Vea depuración en ¡Error! No se encuentra el origen de la referencia., pág ¡Error! Marcador no definido.

Crear nuevo proyecto Abrir proyecto

Nuevo archivo fuente

Sólo compilar

Ejecutar Compilar y Ejecutar

Reconstruir todo (recomendable)

Depuración Añadir o quitar archivo del proyecto

Opciones para guardar archivo o todo el proyecto

Page 35: Introducción poo

35

PASO A PASO PARA CREAR UN POO CON DEVC++ 1- Crea la carpeta del proyecto con el Explorador de Windows

2- Entra a DevC++ y crea un nuevo proyecto

3- El proyecto es de tipo Console Application

4- Asigna un nombre significativo al proyecto, y clic en Aceptar.

5- Ubica la carpeta del proyecto, asigne el mismo nombre que usó en el paso anterior, y clic en Guardar

6- Clic en “+” para ver todos

los archivos del proyecto

7- Seleccionar todo el texto (Ctrl+A),

borrar y escribir tu Programa Principal

8- Guarda el archivo actual con nombre Principal.cpp

9- Agrega un nuevo archivo fuente (para cada clase), clic en Yes y graba archivo con nombre Trabajador.h

10- Agregas otro nuevo archivo fuente (para el .cpp), y grabas con nombre Trabajador.cpp, pero debes eliminarlo de la lista de archivos

para que te compile el proyecto

11- Seleccionando Trabajador.cpp, clic derecho y Remover Archivo lo

quita del proyecto

12- Compilar todo. Obtendrás Done (listo) cuando no tengas errores

13- Ejecutar

14- Tu programa está corriendo!

Page 36: Introducción poo

36

Identificación de errores de compilación

Revisa la carpeta con el proyecto Proy-EstudPat

I DENTIFICACI ÓN DE ERRORES DE COMPILACI ÓN

class CtaBanco { private: float saldo_actual; char tipo_op; float monto; public: CtaBanco (); CtaBanco (float, char, float); void SetSaldoActual (float); void SetTipoOp (char); void SetMonto (float); float GetSaldoActual (); char GetTipoOp (); float GetMonto (); float DetNvoSaldo (); }

El error que ves en la imagen se produce por la falta del punto y coma al final de la interfaz de la

clase CtaBanco.

Por cada error de compilación, el compilador de C++ produce varias líneas que explican el mismo. El panel inferior de la

I DE DevC++ muestra estos errores, te permite hacer doble clic en cada una y te lleva a la línea de código donde se produce el error.

Cuando compilas tu programa:• DevC++ revisa la sintaxis de

todos los archivos que conforman tu proyecto.

• La secuencia de comandos #include establece el orden de compilación.

• En ese mismo orden se muestran los errores.

• El compilador intentará identificar tantos errores como sea posible

METODOLOGÍA PARA CORREGIR ERRORES DE COMPILACIÓN CON DEVC++• Comience con el primer error mostrado, haga doble clic en él.• Debes aprender el significado del mensaje de error.• Lo mejor es resolver un error y volver a compilar.• Si cuando compilas identificas más de un error, entonces aprovecha y corrige

tantos errores como puedas.• Ya sabes que la ventanita con el mensaje “Done” te indica que ya tu programa es

sintácticamente correcto.

Page 37: Introducción poo

37

Metodología para el análisis y Programación Orientada a Objetos

Cuando hacemos un programa nos enfrentamos a la elaboración de un producto (en este caso un producto software), y por tanto es preciso cumplir una serie de etapas

de análisis y diseño que permitan el logro de los requerimientos por parte del cliente. Además, en la medida que se hacen cada vez más complejos los programas, el diseño preciso de la solución nos permitirán lograr más rápidamente la solución.

EJ EMPLO 1 DE APLI CACI ÓN DE METODOLOGÍ A

Planteamiento del problema

Programar con POO: Dado el saldo actual de una cuenta bancaria, el tipo de una nueva operación que se realizó y el monto de la misma, determinar el nuevo saldo de la cuenta.

Dado el saldo actual de una cuenta bancaria, el tipo de una nueva operación que se realizó y el monto de la misma, determinar el nuevo saldo de la cuenta.

1- Comprende: resalta las entidades que participan y

los datos que te dan; la clase final está subrayada

Si tengo 2000 Bs en el banco (saldo_actual) Las operaciones??? Retiro – depósito (tipo_op)

Ok!, si deposito 1000... (monto) Entonces tendré 3000 Bs (nvo_saldo)

Pero si retiro 1500 (monto)... me quedan 500 Bs Ta’ fácil: al saldo actual le sumo si es

deposito o le resto si es retiro (DetNvoSaldo)

2- Ejemplo: Este proceso de análisis te llevará a la solución fi nal. El cliente

puede decirte rápidamente si vas bien.

2- Abstracción: Este razonamiento es una excelente abstracción del problema

Los nombres de variables (en paréntesis) puedes idearlos una vez aprobado el ejemplo

CtaBanco

saldo_actual : float tipo_op : char monto : float

DetNvoSaldo () : fl oat

3- Clases: Observa que los componentes vienen desde el ejemplo: con el nombre

que ideaste!... si es dato de entrada, será atributo, los cálculos son métodos...

Recuerda que todos los métodos llevan paréntesis así no tengan argumentos.

Page 38: Introducción poo

38

Metodología para el análisis y Programación Orientada a Objetos

Con f recuencia te enf rentarás a planteamientos de problemas donde no están explícitos los datos de entrada ni los

requerimientos; algunos pueden estar implícitos (sobreentendidos), y otros tendrás que incluirlos ya que si no, no te funciona el modelo (la

ejemplificación). Deberás practicar mucho.

EJ EMPLO 2 DE APLI CACI ÓN DE METODOLOGÍ A

Programar con POO: Dado un número entero, determinar si el mismo es positivo o negativo.

Dado un número entero, determinar si el mismo es positivo o negativo.

1- Comprende: resalta las entidades que participan y los datos que te dan

El número 10 es positivo... 0 (cero) también... 2- Ejemplo: Este proceso de análisis te llevará a la solución final. El cliente

puede decirte rápidamente si vas bien.

2- Abstracción: Este razonamiento es una excelente abstracción del problema

NroEntero

valor : int

DetEsPositivo () : bool 3- Clases: Observa que los componentes vienen desde el ejemplo: con el nombre

que ideaste!... si es dato de entrada, será atributo, los cálculos son métodos...

Planteamiento del problema

Cómo saber si un valor es positivo???

Ya sé!! Si el número es mayor que cero, entonces es positivo (DetEsPositivo)

Nota que en el planteamiento sólo resaltaste número entero (la clase), el valor estaba implícito.

Page 39: Introducción poo

39

DEL EJ EMPLO Y ABSTRACCIÓN AL POO Abstracción en ¡Error! No se encuentra el origen de la referencia., pág. ¡Error!

Marcador no definido. I dentificación de objetos en ¡Error! No

se encuentra el origen de la referencia., pág. ¡Error! Marcador no definido.

La ejemplificación te da nombres de atributos y nombres de métodos

class CtaBanco { private: float saldo_actual; char tipo_op; // "D"=Depósito, "R"=Retiro float monto; public: :::::

:::::: float CtaBanco :: DetNvoSaldo (){ if (tipo_op == 'D') return saldo_actual + monto; else return saldo_actual - monto; }

La abstracción te lleva a la

implementación de los métodos

EJ EMPLO 1 DE POO (CARPETA PROY-CTABANCO)

CtaBanco :: CtaBanco (){ saldo_actual = 0; tipo_op = 'D'; monto = 0; } CtaBanco :: CtaBanco (float s, char t, float m){ saldo_actual = s; tipo_op = t; monto = m; } void CtaBanco :: SetSaldoActual (float s){ saldo_actual = s; } ::: // ACÁ VAN EL RESTO DE LOS GETs Y SETs float CtaBanco :: GetMonto (){ return monto; } float CtaBanco :: DetNvoSaldo (){ if (tipo_op == 'D') return saldo_actual + monto; else return saldo_actual - monto; }

#include <iostream> #include "CtaBanco.h" using namespace std; int main (){ float saldo, mto; char t_op; cout << "Introduzca el saldo actual: "; cin >> saldo; cout << "Tipo de operación "; cout << "(R=Retiro, D=Deposito): "; cin >> t_op; cout << "Introduzca el monto: "; cin >> mto; CtaBanco c (saldo, t_op, mto); cout << "El nuevo saldo de la cuenta es: "; cout << c.DetNvoSaldo () << endl; system("PAUSE"); }

#ifndef CTABANCO_H #define CTABANCO_H class CtaBanco { private: float saldo_actual; char tipo_op; // "D"=Depósito, "R"=Retiro float monto; public: CtaBanco (); CtaBanco (float, char, float); void SetSaldoActual (float); void SetTipoOp (char); void SetMonto (float); float GetSaldoActual (); char GetTipoOp (); float GetMonto (); float DetNvoSaldo (); }; #include "CtaBanco.cpp" #endif

I nterfaz de clase

CtaBanco (CtaBanco.h)

Este punto y coma es importantísimo!, si no, no compila!

I mplementación de clase CtaBanco (CtaBanco.cpp)

Programa Principal (Principal.cpp)

Programa en ejecución

Page 40: Introducción poo

40

EJ EMPLO 2 DE POO (CARPETA PROY-NROENTERO)

NroEntero :: NroEntero (){ valor = 0; } NroEntero :: NroEntero (int v){ valor = v; } void NroEntero :: SetValor (int v){ valor = v; } int NroEntero :: GetValor (){ return valor; } bool NroEntero :: DetEsPositivo (){ if (valor >= 0) return 1; else return 0; }

#include <iostream> #include "NroEntero.h" using namespace std; int main (){ int Nro; cout << "Introduzca el Nro entero: "; cin >> Nro; NroEntero n (Nro); if (n.DetEsPositivo ()) cout << "El numero es positivo." << endl; else cout << "El numero es negativo." << endl; system("PAUSE"); }

#ifndef NROENTERO_H #define NROENTERO_H class NroEntero { private: int valor; public: NroEntero (); NroEntero (int); void SetValor (int); int GetValor (); bool DetEsPositivo(); }; #include "NroEntero.cpp" #endif

NroEntero.h

Crear POO paso a paso en ¡Error! No se encuentra el

origen de la referencia., pág. ¡Error! Marcador

no definido. Este punto y coma es importantísimo!, si no, no compila!

NroEntero.cpp

Programa Principal (Principal.cpp)

Programa en ejecución

Llamada :: Llamada (){ tipo = 'L'; minutos = 0; } Llamada :: Llamada (char t, int m){ tipo = t; minutos = m; } float Llamada :: DetMtoServicio (){ if (tipo == 'L') return minutos * 0.1; else return minutos * 0.3; }

::: class Llamada { private: char tipo; int minutos; public: Llamada (); Llamada (char, int); // Se omiten Sets y Gets float DetMtoServicio (); }; ::::

#include <iostream> #include "Llamada.h" using namespace std; int main (){ int mins; char tipo; cout << "Tipo llamada (L=ocal, C=elular): "; cin >> tipo; cout << "Cantidad de minutos: "; cin >> mins; Llamada ll (tipo, mins); cout << "El monto del servicio es: "; cout << ll.DetMtoServicio () << endl; system("PAUSE"); }

EJ EMPLO 3 DE POO (CARPETA PROY-LLAMADA)

Llamada.h

Crear POO paso a paso en ¡Error! No se encuentra el

origen de la referencia., pág. ¡Error! Marcador

no definido.

Este punto y coma es importantísimo!, si no, no compila!

Llamada.cpp Programa Principal

(Principal.cpp)

Programa en ejecución

Page 41: Introducción poo

41

El número 10 es positivo... 0 (cero) también... Cómo saber si un valor es positivo???

Ya sé!! Si el número es mayor que cero, entonces es positivo (DetEsPositivo)

DEL EJ EMPLO Y ABSTRACCIÓN AL POO Abstracción en ¡Error! No se encuentra el origen de la referencia., pág. ¡Error!

Marcador no definido. I dentificación de objetos en ¡Error! No

se encuentra el origen de la referencia., pág. ¡Error! Marcador no definido.

La ejemplificación te da nombres de atributos y nombres de métodos

Si llama local 10 minutos son 1 Bs (tipo=L) Si llama celular 20 minutos son 6 Bs (tipo=C)

Condicionado al tipo (L - C) se multiplican los minutos por 0,1 ó 0,3 (DetMtoServicio)

class NroEntero { private: int valor; public: ::::::::

bool NroEntero :: DetEsPositivo (){ if (valor >= 0) return 1; else return 0; }

class Llamada { private: char tipo; int minutos; ::::::

float Llamada :: DetMtoServicio (){ if (tipo == 'L') return minutos * 0.1; else return minutos * 0.3; }

La abstracción te lleva a la

implementación de los métodos

Page 42: Introducción poo

42

LECTURAS OBLIGATORIAS

EN LA GUÍA DIDÁCTICA:• Estado de la memoria en una ejecución• Corridas en frío• Depuración de Programas• Sintaxis de comandos de Programación• Métricas de Programación: Legibilidad del

código• Entrada de datos desde archivos