You are on page 1of 34

UNIVERSIDAD SALESIANA DE BOLIVIA

CARRERA INGENIERIA DE SISTEMAS

DOSSIER

PROGRAMACION III
Lic. Israel Torrez Valverde

II-2013

INGENIERIA DE SISTEMAS PROGRAMACION III

CAPTULO 1
PROGRAMACION ORIENTADA A OBJETOS PARADIGMAS DE PROGRAMACIN A lo largo de la historia se han ido desarrollando distintos lenguajes de programacin basados en distintos paradigmas o formas de estructurar y pensar el desarrollo de software. A principios de la dcada de 1980 comenz a surgir el llamado paradigma Orienta do a Objetos, que propona una forma novedosa de comprender y modelar el mundo que nos rodea. Hoy, luego de varias dcadas, este paradigma es sin duda es uno de los principales y ms importantes en la escena del desarrollo de software. Hay formas diferentes para realizar la programacin: o o o o o o Estructurados (C, Pascal, Basic, etc.) Funcionales (CAML) Declarativos (Prolog) Orientados a Objetos (Java , C#, VB.NET, Smalltalk) Orientados a Aspectos Hbridos (Lisp, Visual Basic)

Cada enfoque tiene sus ventajas y desventajas. Cada uno es ms apropiado para ciertas cosas. A diferencia del paradigma estructurado, que propone modelar a la realidad como una serie de procedimientos secuenciales, la orientacin a objetos propone representar todo lo que conocemos en trminos de entidades (objetos) que interactan y se relacionan entre s. Estas entidades pueden representar absolutamente cualquier cosa, desde algo fsico y tangible como una persona, una factura o un auto, hasta cosas intangibles como la imaginacin, un proceso qumico o un algoritmo matemtico. La mayora de los programadores que tienen conocimientos de paradigmas estructurados tienden a encarar programacin orientada a objetos como un agregado ms a aquellos, o slo como una forma ligeramente distinta de hacer lo mismo. Segn iremos viendo a lo largo del curso, la realidad nos dicta que para ser buenos programadores orientados a objetos deberemos entender y modelar la realidad de una manera distinta.

Pgina 2

INGENIERIA DE SISTEMAS PROGRAMACION III

Por qu Orientado a Objetos (OO)? o o o o Se parece ms al mundo real Permite representar modelos complejos Muy apropiada para aplicaciones de negocios Las empresas ahora s aceptan la POO Las nuevas plataformas de desarrollo la han adoptado (Java / .NET)

En la actualidad, el paradigma de orientado a objetos es sin lugar a dudas el ms utilizado por las empresas de todo el mundo a la hora de encarar desarrollos de aplicaciones de software, ya que permite representar de manera relativamente simple modelos y realidades muy complejas y esto hace que el software sea ms fcil de programar, comprender y mantener. Por otra parte, luego de ms de 30 aos de investigacin y desarrollo sobre Orientado a Objetos pareciera ser que la industria se ha dado cuenta que el paradigma est lo suficientemente maduro como para dar soporte a las aplicaciones ms importantes del mundo actual.

CLASES Y OBJETOS Qu es un Objeto? Informalmente, un objeto representa una entidad del mundo real, como: Entidades Fsicas (Ej.: Vehculo, Casa, Producto) Entidades Conceptuales (Ej.: Proceso Qumico, Transaccin Bancaria) Entidades de Software (Ej.: Lista Enlazada, pilas, colas, Interfaz Grfica)

Definicin Formal de Objeto Segn Rumbaugh, Un objeto es un concepto, abstraccin o cosa con un significado y lmites claros en el problema que se est modelando. Un objeto posee, segn Booch, 3 caractersticas. Estado, Comportamiento e Identidad

Pgina 3

INGENIERIA DE SISTEMAS PROGRAMACION III

Segn las definiciones formales de James Rumbaugh y Grady Booch (dos de las principales autoridades de programacin orientada a objetos en la actualidad, y coautores de UML, el lenguaje de modelado universal para objetos), un objeto es una abstraccin de la realidad que tiene un significado concreto y claro para el problema que se est modelando. Un ejemplo de una entidad fsica representada como un objeto conceptual puede ser Un Auto. Ahora bien, todos los objetos tienen 3 caractersticas principales: Estado: representa la definicin de atributos internos del objeto, sus caractersticas. Por ejemplo, un auto tiene un cierto nmero de puertas, un cierto nmero de ruedas, un volante, un motor, pedales, etc. Comportamiento: r e p r e s e n t a la definicin del comportamiento del objeto, las acciones que ste puede realizar. Por ejemplo, un auto puede arrancar, frenar, doblar, acelerar, etc. Identidad: Cada objeto tiene una identidad nica, incluso si su estado es idntico al de otro objeto.

Un objeto posee Estado Lo que el objeto sabe. El estado de un objeto es una de las posibles condiciones en que el objeto puede existir. El estado normalmente cambia en el transcurso del tiempo. El estado de un objeto es implementado por un conjunto de propiedades (atributos), adems de las conexiones que puede tener con otros objetos

Un objeto posee Comportamiento Lo que el objeto puede hacer El comportamiento de un objeto determina cmo ste acta y reacciona frente a las peticiones de otros objetos Es modelado por un conjunto de mensajes a los que el objeto puede responder (Operaciones que puede realizar)

Pgina 4

INGENIERIA DE SISTEMAS PROGRAMACION III

Se implementa mediante mtodos

Un objeto posee Identidad El concepto de identidad se refiere al hecho de que cada objeto es nico en el mundo, por ms que su conjunto de atributos y sus valores sean exactamente iguales a los de otros objetos. Por ejemplo, dos autos del mismo modelo, color, motor, salidos de la misma lnea de produccin el mismo da no dejan de ser dos autos diferentes, por ms que su conjunto de atributos y sus valores sean iguales. La nica posibilidad de que dos objetos sean iguales es que sean el mismo objeto.

Qu es una Clase? Una clase es una descripcin de un grupo de objetos con: Propiedades en comn (atributos) Comportamiento similar (operaciones) La misma forma de relacionarse con otros objetos (relaciones) Una semntica en comn (significan lo mismo)

Una clase es una abstraccin que: Enfatiza las caractersticas relevantes Suprime otras caractersticas (simplificacin) Un objeto es una instancia de una clase

La forma ms sencilla de entender el concepto de clase es si la vemos como una agrupacin de objetos con caractersticas similares. Por ejemplo, un auto ES UN tipo particular de vehculo motorizado, con lo cual dentro de su comportamiento podemos encontrar arrancar y frenar, entre otros. Ahora bien, una motocicleta tambin ES UN vehculo motorizado, y tiene dentro de su comportamiento arrancar y frenar. El conjunto de atributos tambin es compartido entre una motocicleta y un automvil, aunque sus valores no coincidan necesariamente. Por ejemplo, ambos tienen el atrib uto cantidad de ruedas, slo que el auto tiene 4 y la motocicleta 2.

Pgina 5

INGENIERIA DE SISTEMAS PROGRAMACION III

Objetos y Clases Una clase es una definicin abstracta de un objeto Define la estructura y el comportamiento compartidos por los objetos Sirve como modelo para la creacin de objetos Los objetos pueden ser agrupados en clases

Otra forma til de ver una clase es como una plantilla, plano o molde de un conjunto de entidades a partir del cual se crearn luego instancias particulares (los objetos). La interaccin de las entidades en el mundo real se produce entre objetos, no entre clases. Las clases no tienen vida en el mundo real, los objetos s. Para poder interactuar con alguna clase deberemos crear una instancia particular de ella, con un conjunto de valores definidos para los atributos. A este proceso se lo conoce como instanciacin de un objeto. Ejemplo de una Clase Clase: Curso Estado (Atributos) Nombre Ubicacin Das Ofrecidos Horario de Inicio Horario de Trmino Comportamiento (Mtodos) Agregar un Alumno Borrar un Alumno Entregar un Listado del Curso Determinar si est Completo

Pgina 6

INGENIERIA DE SISTEMAS PROGRAMACION III

Modificadores de Acceso Permiten definir el nivel de acceso (visibilidad) de los miembros (atributos o mtodos) de una clase Publico: Cualquier clase puede ver los miembros pblicos de otra clase Privado: Slo la clase puede ver sus propios miembros privados Existen otros dos modificadores para propsitos especficos (Paquete, Protegido)

Tanto para los atributos (estado) como para los mtodos (comportamiento) de una clase puede configurarse el nivel de visibilidad o acceso que estos tendrn hacia el mundo exterior (otras clases que interacten con ella). Los cuatro niveles de acceso ms comunes que se pueden establecer a nivel de miembro de una clase son: Pblico: un miembro pblico puede ser accedido desde cualquier otra clase. Privado: un miembro privado solamente puede ser accedido desde la clase en la que est declarado. Protegido: un miembro protegido solamente puede ser accedido desde la clase en la que est declarado y desde las clases que hereden de ella (se ver el concepto de herencia ms adelante en este curso). Paquete: un miembro de tipo paquete slo podr ser accedido desde las clases que estn en el mismo paquete lgico que la clase en la que est definido.

Ejemplo: declaracin de una clase y un mtodo #include <iostream.h> #include <string.h> //definicion de la clase tutor class tutor { Public: int carnet; char nombre[20]; char sexo; void intro_nombre(); Private: int num_embarazos; }

Pgina 7

INGENIERIA DE SISTEMAS PROGRAMACION III

Qu es UML? UML es un lenguaje visual de modelado y documentacin de sistemas, tan utilizado en el mundo de desarrollo orientado a objetos que se ha convertido casi en un estndar de hecho. A partir de esto todos los diagramas que hagamos sern con diagramas UML. UML es un lenguaje visual para especificar, construir y documentar sistemas (OMG - Object Management Group) Unified (UNIFICADO): El aporte de muchos mtodos y notaciones. Independiente de implementaciones, plataformas y lenguajes. Modeling (MODELADO): Los modelos son utilizados en todas las ingenieras. Language (LENGUAJE): Si hay gente, requieren comunicarse. Si se tienen que comunicar, se tienen que entender. Para entenderse necesitan un lenguaje comn. UML no es Metodologa! Una Clase en UML

Una clase est compuesta de tres secciones La primera seccin contiene el nombre de la clase La segunda seccin muestra la estructura (atributos)

Pgina 8

INGENIERIA DE SISTEMAS PROGRAMACION III

La tercera seccin muestra el comportamiento (operaciones) La segunda y la tercera seccin pueden ser suprimidas Modificadores de Acceso Los miembros pblicos se denotan con el signo + Los miembros privados se denotan con el signo

Pilares de la Programacin Orientada a Objetos Abstraccin El proceso de abstraccin permite seleccionar las caractersticas relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstraccin es clave en el proceso de anlisis y diseo orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar. Ignorancia Selectiva La abstraccin nos ayuda a trabajar con cosas complejas Se enfoca en lo importante Ignora lo que no es importante (simplifica) Una clase es una abstraccin en la que: Se enfatizan las caractersticas relevantes Se suprimen otras caractersticas Una clase debe capturar una y solo una abstraccin clave Encapsulamiento Otro de los pilares de la orientacin a objetos es el encapsulamiento. Para entender este principio veamos un ejemplo prctico: Como todos ustedes se imaginarn, no es necesario ser mecnico de automviles para poder manejar uno. Si el comprender cmo es el funcionamiento interno del motor, la direccin, los

Pgina 9

INGENIERIA DE SISTEMAS PROGRAMACION III

frenos, los cilindros, etc. fuera requisito para poder manejar un automvil, seran muchos menos los conductores certificados y sera mucho ms difcil aprender a manejar. Es ms, si a cualquier automotriz se le ocurriera cambiar el funcionamiento interno de alguna de estas cosas, probablemente todos los conductores tendran que volver a aprender cmo funciona el nuevo componente interno para poder seguir manejando sin problemas. Por suerte esto no es as, ya que la complejidad interna del funcionamiento de un automvil est escondida de los conductores (usuarios). Para poder interactuar con el automvil, ste nos expone una interfaz sencilla y definida, que no cambia nunca por ms que cambien internamente el funcionamiento de sus componentes. Esta interfaz est compuesta por el volante, los pedales, la palanca de cambios, el asiento, etc. De esta forma decimos que el automvil ha encapsulado su complejidad interna. Principio que establece que los atributos propios de un objeto no deben ser visibles desde otros objetos Deben ser declarados como privados Permite abstraer al resto del mundo de la complejidad de la implementacin interna Permite exponer el estado del objeto slo a travs del comportamiento hayamos definido mediante miembros pblicos. Por qu es til? Punto de Control/Validacin Mejor respuesta ante los Cambios Relaciones Todo sistema abarca muchas clases y objetos Los objetos contribuyen en el comportamiento de un sistema colaborando entre si La colaboracin se logra a travs de las relaciones Existen dos tipos principales de relaciones Asociacin Agregacin que le

Pgina 10

INGENIERIA DE SISTEMAS PROGRAMACION III

Relaciones de Asociacin Una asociacin comunicacin es una conexin entre dos clases que representa una

Una asociacin puede tener nombre La comunicacin puede ser tanto uni como bi-direccional (por defecto) La multiplicidad es el nmero de instancias que participan asociacin Ejemplo: Una Persona es Duea de un Vehculo Un Vehculo Pertenece a una Persona

en

una

Relaciones de Agregacin La agregacin es una forma especial de asociacin donde un todo se relaciona con sus partes Tambin se conoce como una parte de o una relacin de contencin Ejemplo: Una Puerta es una parte de un Vehculo El Vehculo es azul, la Puerta es Azul Mover el Vehculo implica mover la Puerta

Pgina 11

INGENIERIA DE SISTEMAS PROGRAMACION III

Herencia El propsito principal de la herencia es el de organizar mejor las clases que componen una determinada realidad, y poder agruparlas en funcin de atributos y comportamientos comunes a la vez que cada una se especializa segn sus particularidades. Cabe aclarar adems que hay dos tipos de herencias: Herencia Simple: una clase derivada puede heredar slo de una clase base (Java y los lenguajes .NET soportan este tipo de herencia) Herencia Mltiple: una clase derivada puede heredar de una o ms clases base (C++ es un ejemplo de lenguaje que soporta este tipo de herencia). Es una relacin entre clases en la cual una clase comparte la estructura y comportamiento definido en otra clase (Grady Booch) Cada clase que hereda de otra posee: Los atributos de la clase base adems de los propios Soporta todos o algunos de los mtodos de la clase base Una subclase hereda de una clase base

Herencia Es-Un: herencia real, donde la subclase es un tipo especfico de la superclase Un Cuadrado es un Rectngulo

Pgina 12

INGENIERIA DE SISTEMAS PROGRAMACION III

Un perro es un mamfero Un automvil es un vehculo a motor QU SON LOS OBJETOS? Un objeto es una abstraccin de cosas (entidades) del mundo real. Instancia de una clase, todo objeto pertenece a una determinada clase. Introduccin a los objetos Casi todo lo que es tangible es un objeto. Una persona, organizacin, mquina o evento puede considerarse objeto. Todos los objetos poseen atributos y exhiben comportamientos. Ejemplo: Los atributos son aqullas cosas que describen a un objeto, tales como su tamao, color o forma. Un perro, por ejemplo, puede ser grande o pequeo; negro, marrn o blanco; flaco o gordo. Los comportamientos, por otro lado, describen qu hacen los objetos. Un perro, por ejemplo, corre, come, juega, duerme, ladra y otros. Los atributos tambin denomina mtodo. Ejemplos de objetos Qu cosas pueden ser objetos en un programa orientado a objetos? Las respuesta est slo limitada a su imaginacin. Algunos ejemplos pueden ser: Objetos fsicos Aviones en un sistema de control de trfico areo Automviles en un sistema de control de trfico terrestre. Casas de una ciudad o un pueblo Interfaces grficos Ventanas Mens Cuadros de dialogo Objetos grficos se conocen como datos, mientras que el comportamiento se

Pgina 13

INGENIERIA DE SISTEMAS PROGRAMACION III

Animales Vertebrados Invertebrados Tipos de datos definidos por el usuario Datos complejos Puntos de un sistema de coordenadas Ecuaciones Alimentos Frutas Verduras Carnes Pasteles IDENTIFICACION DE OBJETOS Primera Regla Para construir cualquier aplicacin utilizando un enfoque de POO, primero se deben identificar los objetos. El hablar de objetos es el nico vocabulario que se utiliza para describir objetos y sus caractersticas en programacin. Para identificar objetos, o pensar necesidades de los usuarios finales. en objeto, un programador debe evaluar las

La mayor parte de los programadores se refieren a sta como la fase de reunin de requisitos de un proyecto . Esto generalmente dar como resultado una lista potencial de objetos de un dominio del problema o relacionados con la tarea. Para cumplir con las necesidades del usuario final, los programadores tambin pueden necesitar definir objetos especializados que soporten los objetos de dominio del problema. Por ejemplo, para proporcionar una forma para que el usuario introduzca datos, cree objetos de interfaz del usuario tales como ventanas, botones, barras de desplazamiento y recuadros de texto. Para proporcionar a los usuarios acceso a los datos que se encuentran en los archivos, cree objetos del entorno de operacin tales como un archivo, entrada/salida, cliente y servidor. Para almacenar los datos en una ubicacin relativamente permanente, cree objetos que se escriban en archivos o bases de datos. Todos estos objetos interactuando entre s resultan en una aplicacin POO. Al disear objetos, ayuda el hacerse estas preguntas: Cules son los atributos del objeto? Cules son los comportamientos del objeto?

Pgina 14

INGENIERIA DE SISTEMAS PROGRAMACION III

Segunda Regla Una regla general simple para identificar las clases es buscar los sustantivos en el anlisis del problema. Los mtodos, por otro lado, corresponden a los verbos. Por ejemplo, en un Sistema de Procesamiento de Pedidos, algunos de estos sustantivos son: Artculo Pedido Direccin de envo Pago Cuenta Estos sustantivos podran resultar en las clases artculo, pedidos, cuenta y otros. Despus, buscamos por los verbos. Los artculos son adicionados a los pedidos. Los pedidos son enviados o cancelados. Los pagos son aplicados a los pedidos. Con cada verbo, como "adicionar", "enviar", "cancelar", y "aplicar", usted identifica un objeto. Por ejemplo, cuando un nuevo artculo es adicionado a un pedido, el objeto pedido debe hacerse cargo porque sabe cmo almacenar y clasificar los artculos. Es decir, adicionar deber ser un mtodo de la clase pedido que toma un objeto artculo como un parmetro. Por supuesto, la regla identificar los "sustantivos y verbos" son solamente reglas generales, y solo la experiencia podr ayudarlo a determinar qu sustantivos y ve rbos son los ms importantes cuando construya sus clases. Clase Una clase es la descripcin de un conjunto de objetos; consta de datos y mtodos que resumen caractersticas comunes de un conjunto de objetos. Es un mecanismo que permite la creacin de objetos, por lo tanto los objetos pertenece a una determinada clase.

Ejemplo 1: Shakira, Juanes, Chino y Nacho, Axel, son objetos de la clase: cantante_latino, es decir, personas especficas con nombres especficos son objetos de esa clase, si poseen ciertas caractersticas.

Pgina 15

INGENIERIA DE SISTEMAS PROGRAMACION III

Ejemplo 2: Jesus Rosa

Estudiante

USB, UMSA, UCB, UTB

Universidad

Ejercicio 1: A qu clases pertenecen los siguientes objetos?

Naranja Silla Perforadora Cuaderno Ejercicio 2:

Bolgrafo Toronja Pedro Cebra

Mochila Meza Jabal Manzana

Mara Nutria Escritorio

Identifique 5 clases y sus correspondientes objetos dentro la universidad.

Definiendo sus propias clases La forma ms simple para la definicin de una clase en C++ es:

class <identificador de clase> { public: <lista de miembros (atributos y/o mtodos)> private: <lista de miembros (atributos y/o mtodos)> protected: <lista de miembros (atributos y/o mtodos)> };

Pgina 16

INGENIERIA DE SISTEMAS PROGRAMACION III

La clase Empleado: Consideremos el siguiente ejemplo de la clase Empleado que podra ser usado por una empresa para el pago de su planilla de sueldos. Diagrama UML: Empleado -nombre: String -salario: int -cargo: String +leerDatos(): Void +verDatos(): Void

Implementacin: #include <iostream.h> #include <string.h> class Empleado { Private: char nombre[30]; int salario; Char cargo[15]; public: void leerDatos(); void verDatos(); }; void Empleado::leerDatos() { cout << "Cargando datos del Empleado:\n"; cout << "***************************\n"; cout << "\n Nombre: "; gets(nombre); cout << "\n Salario: "; cin>>salario; cout << "\n Cargo: "; gets(cargo); }

Pgina 17

INGENIERIA DE SISTEMAS PROGRAMACION III

void Empleado::verDatos() { cout << "Los datos del empleado son:\n"; cout << "***************************\n"; cout << "\n Nombre: "<<nombre; cout << "\n Salario: "<<salario; cout << "\n Cargo: "<<cargo; } void main() { //Creando un objeto de la clase Empleado: Empleado objeto1; //para llamar a los metodos: objeto1.leerdatos(); objeto1.verDatos(); } SOBRECARGA DE METODOS Y CONSTRUCTORES Sobrecarga.- Es la capacidad de un lenguaje de programacin, que permite nombrar con el mismo identificador diferentes variables u operaciones. Sobrecarga de mtodos En programacin orientada a objetos la sobrecarga se refiere a la posibilidad de tener dos o ms mtodos o funciones con el mismo nombre pero funcionalidad diferente. Es decir, dos o ms funciones con el mismo nombre realizan acciones diferentes. El compilador usar una u otra dependiendo de los parmetros usados. Las ventajas son ms evidentes cuando debemos hacer las mismas operaciones con objetos de diferentes tipos o con distinto nmero de objetos.

Tanto mtodos como constructores pueden sobrecargarse. Los mtodos se sobrecargan tpicamente porque el usuario desea hacer que diferentes versiones de un mtodo acepten diferentes entradas, pero que tengan el mismo nombre, ya que tienen funciones similares. Las reglas para la sobrecarga de mtodos o constructores son las siguientes: 1. Los nombres deben ser los mismos. 2. La cantidad de argumentos debe ser diferente. 3. Si la cantidad de argumentos es la misma, al menos un argumento (por posicin) debe tener un tipo de datos diferente. 4. No es necesario que el tipo de retorno sea diferente.

Pgina 18

INGENIERIA DE SISTEMAS PROGRAMACION III

Ejemplo 1: class Articulo { private float precio; public void setPrecio() public void setPrecio(float nuevoPrecio) } public void Articulo::setPrecio() { precio = 3.50; } public voidArticulo:: setPrecio(float nuevoPrecio) { precio = nuevoPrecio; } Void main() { Articulo objeto1; Float nuevoPrecio; objeto1.setPrecio(); cout<<Ingrese el nuevo precio: ; cin>> nuevoPrecio; objeto1.setPrecio(nuevoPrecio); } Constructores Los constructores son funciones miembro especiales que sirven para inicializar un objeto de una determinada clase al mismo tiempo que se declara. Los constructores son especiales por varios motivos:

Tienen el mismo nombre que la clase a la que pertenecen. No tienen tipo de retorno, y por lo tanto no retornan ningn valor. No pueden ser heredados.

Pgina 19

INGENIERIA DE SISTEMAS PROGRAMACION III

Por ltimo, deben ser pblicos, no tendra ningn sentido declarar un constructor como privado, ya que siempre se usan desde el exterior de la clase, ni tampoco como protegido, ya que no puede ser heredado.

Ejemplo N 2 class Articulo { private: // Datos miembro de la clase "Articulo" int id; float precio; public: // Constructor Articulo(int id2, float precio2); // Funciones miembro de la clase "Articulo" void leerDatos(); void verDatos(); }; Articulo::Articulo(int id2, float precio2) { id = id2; precio = precio2; } void Articulo::leerDatos() { cout << "Cargando datos del Articulo:\n"; cout << "***************************\n"; cout << "\n ID: "; cin>> id; cout << "\n Precio: "; cin>> precio; } void Empleado::verDatos() { cout << "Los datos del empleado son:\n"; cout << "***************************\n"; cout << "\n Id: "<<id; cout << "\n Precio: "<<precio; }

Pgina 20

INGENIERIA DE SISTEMAS PROGRAMACION III

Void main() { // declaracin del constrctor de objetos Articulo objeto1(12, 13.5); objeto1.leerDatos(); objeto1.MostrarDatos(); } Cuando no especifiquemos un constructor para una clase, el compilador crea uno por defecto sin argumentos. Por eso el ejemplo del captulo anterior funcionaba correctamente. Cuando se crean objetos locales, los datos miembros no se inicializaran, contendran la "basura" que hubiese en la memoria asignada al objeto. Si se trata de objetos globales, los datos miembros se inicializan a cero. Para declarar objetos usando el constructor por defecto o un constructor que hayamos declarado sin parmetros no se debe usar el parntesis. Sobrecarga de constructores Los constructores son funciones, tambin pueden definirse varios constructores para cada clase, es decir, el constructor puede sobrecargarse. La nica limitacin (como en todos los casos de sobrecarga) es que no pueden declararse varios constructores con el mismo nmero y el mismo tipo de argumentos. Ejemplo N 2

class Articulo { private: // Datos miembro de la clase "Articulo" int id; float precio; public: // Constructor Articulo; Articulo(int id2, float precio2); // Funciones miembro de la clase "Articulo" void leerDatos(); void verDatos(); };

Pgina 21

INGENIERIA DE SISTEMAS PROGRAMACION III

DESTRUCTORES Los destructores son funciones miembro especiales que sirven para eliminar un objeto de una determinada clase. El destructor realizar procesos necesarios cuando un objeto termine su mbito temporal, por ejemplo liberando la memoria dinmica utilizada por dicho objeto o liberando recursos usados, como ficheros, dispositivos, etc. Al igual que los constructores, los destructores tambin tienen algunas caractersticas especiales:

Tambin tienen el mismo nombre que la clase a la que pertenecen, pero tienen el smbolo delante. No tienen tipo de retorno, y por lo tanto no retornan ningn valor. No tienen parmetros. No pueden ser heredados. Deben ser pblicos, no tendra ningn 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 lgico, puesto que no tienen valor de retorno ni parmetros, no hay posibilidad de sobrecarga.

Cuando se define un destructor para una clase, ste es llamado automticamente cuando se abandona el mbito en el que fue definido. Esto es as salvo cuando el objeto fue creado dinmicamente con el operador new, ya que en ese caso, cuando es necesario eliminarlo, hay que hacerlo explcitamente usando el operador delete. En general, ser necesario definir un destructor cuando nuestra clase tenga datos miembro de tipo puntero, aunque esto no es una regla estricta. Ejemplo: #include <iostream.h> #include <cstring.h> class cadena { public: cadena(); // Constructor por defecto cadena(const char *c); // Constructor desde cadena c cadena(int n); // Constructor de cadena de n caracteres

Pgina 22

INGENIERIA DE SISTEMAS PROGRAMACION III

~cadena();

// Destructor

void Asignar(const char *dest); char *Leer(char *c); private: char *cad; // Puntero a char: cadena de caracteres }; cadena::cadena() : cad(NULL) {} cadena::cadena(const char *c) { cad = new char[strlen(c)+1];// Reserva memoria para cadena strcpy(cad, c); // Almacena la cadena } cadena::cadena(int n) { cad = new char[n+1]; // Reserva memoria para n caracteres cad[0] = 0; // Cadena vaca } cadena::cadena(const cadena &Cad) { // Reservamos memoria para la nueva y la almacenamos cad = new char[strlen(Cad.cad)+1]; // Reserva memoria para cadena strcpy(cad, Cad.cad); // Almacena la cadena } cadena::~cadena() { delete[] cad; // Libera la memoria reservada a cad } void cadena::Asignar(const char *dest) { // Eliminamos la cadena actual: delete[] cad; // Reservamos memoria para la nueva y la almacenamos cad = new char[strlen(dest)+1]; // Reserva memoria para la cadena strcpy(cad, dest); // Almacena la cadena

Pgina 23

INGENIERIA DE SISTEMAS PROGRAMACION III

} char *cadena::Leer(char *c) { strcpy(c, cad); return c; } void main() { cadena Cadena1("Cadena de prueba"); cadena *Cadena2; // Cadena2 es un puntero char c[256]; // Modificamos Cadena1: Cadena1.Asignar("Otra cadena diferente"); // Creamos Cadena2: Cadena2 = new cadena("Cadena de prueba n 2"); // Ver resultados cout << "Cadena 1: " << Cadena1.Leer(c) << endl; cout << "Cadena 2: " << Cadena2->Leer(c) << endl; delete Cadena2; // Destruir Cadena2. }

Pgina 24

INGENIERIA DE SISTEMAS PROGRAMACION III

Captulo 2
HERENCIA El captulo 1 le inici en clases y objetos. En este captulo, usted aprender acerca de la herencia, otro concepto fundamental de programacin orientada a objetos. La idea detrs de la herencia es que usted puede crear nuevas clases que son construidas sobre clases existentes. Cuando usted hereda de una clase existente, usted reutiliza (o hereda) sus mtodos y campos y usted le aade nuevos mtodos y campos para adaptar su nueva clase a nuevas situaciones. Esta tcnica es esencial en programacin orientada a objetos. Jerarqua de Herencia: clases base y clases derivadas Cada nueva clase obtenida mediante herencia se conoce como clase derivada, y las clases a partir de las cuales se deriva, clases base. Adems, cada clase derivada puede usarse como clase base para obtener una nueva clase derivada. Y cada clase derivada puede serlo de una o ms clases base. En este ltimo caso hablaremos de derivacin mltiple. Esto nos permite crear una jerarqua de clases tan compleja como sea necesario. Bien, pero que ventajas tiene derivar clases? En realidad, ese es el principio de la programacin orientada a objetos. Esta propiedad nos permite encapsular diferentes partes de cualquier objeto real o imaginario, y vincularlo con objetos ms elaborados del mismo tipo bsico, que heredarn todas sus caractersticas. Lo veremos mejor con un ejemplo. Un ejemplo muy socorrido es de las personas. Supongamos que nuestra clase base para clasificar a las personas en funcin de su profesin sea "Persona". Presta especial atencin a la palabra "clasificar", es el punto de partida para buscar la solucin de cualquier problema que se pretenda resolver usando POO. Lo primero que debemos hacer es buscar categoras, propiedades comunes y distintas que nos permitan clasificar los objetos, y crear lo que despus sern las clases de nuestro programa. Es muy importante dedicar el tiempo y atencin necesaria a esta tarea, de ello depender la flexibilidad, reutilizacin y eficacia de nuestro programa. Ten en cuenta que las jerarquas de clases se usan especialmente en la resolucin de problemas complejos, es difcil que tengas que recurrir a ellas para resolver problemas sencillos. Siguiendo con el ejemplo, partiremos de la clase "Persona". Independientemente de la profesin, todas las personas tienen propiedades comunes, nombre, fecha de nacimiento, gnero, estado civil, etc. La siguiente clasificacin debe ser menos general, supongamos que dividimos a todas las personas en dos grandes clases: empleados y estudiantes. (Dejaremos de lado, de momento, a los estudiantes que adems trabajan). Lo importante es decidir qu propiedades que no hemos incluido en la clase

Pgina 25

INGENIERIA DE SISTEMAS PROGRAMACION III

"Persona" son exclusivas de los empleados y de los estudiantes. Por ejemplo, los ingresos por nmina son exclusivos de los empleados, la nota media del curso, es exclusiva de los estudiantes. Una vez hecho eso crearemos dos clases derivadas de Persona: "Empleado" y "Estudiante".

Haremos una nueva clasificacin, ahora de los empleados. Podemos clasificar a los empleados en ejecutivos y comerciales (y muchas ms clases, pero para el ejemplo nos limitaremos a esos dos). De nuevo estableceremos propiedades exclusivas de cada clase y crearemos dos nuevas clases derivadas de "Empleado": "Ejecutivo" y "Comercial".

Definicin de una clase derivada Sintaxis class hija : [public | private] padre { ... }; Ejmplo: class Persona { Private: char nombre[30]; char direccin[30]; Int edad; public: void leerDatos(); void verDatos(); };

Pgina 26

INGENIERIA DE SISTEMAS PROGRAMACION III

// Clase derivada Empleado: class Empleado : public Persona { protected: char cargo[15]; float salario; public: void leerDatosE(); void verDatosE(); } void main() { //Creando un objeto de la clase Persona y Empleado: Empleado objeto2; //para llamar a los metodos: //si la funcion tiene el mismo nombre que la funcin de la clase madre objeto2.Persona::leerDatos(); //cuando las funciones de la clase deribada y clase madre tienen diferente nombre objeto2.leerDatosE(); } Podrs ver que hemos declarado los datos miembros de nuestras clases como protected. En general es recomendable declarar siempre los datos de nuestras clases como privados, de ese modo no son accesibles desde el exterior de la clase y adems, las posibles modificaciones de esos datos, en cuanto a tipo o tamao, slo requieren ajustes de los mtodos de la propia clase. Pero en el caso de estructuras jerrquicas de clases puede ser interesante que las clases derivadas tengan acceso a los datos miembros de las clases base. Usar el acceso protected nos permite que los datos sean inaccesibles desde el exterior de las clases, pero a la vez, permite que sean accesibles desde las clases derivadas. POLIMORFISMO Y FUNCIONES VIRTUALES Polimorfismo es la propiedad que tienen los objetos de permitir invocar genricamente un comportamiento (mtodo) cuya implementacin ser delegada al objeto correspondiente recin en tiempo de ejecucin. El polimorfismo tiende a existir en las relaciones de herencia, pero no siempre es as. El polimorfismo ocurre cuando un programa invoca a un mtodo a travs de una variable de la superclase; en tiempo de ejecucin, se hace una llamada a la versin correcta del mtodo de la subclase, con base en el tipo de la referencia almacenada en la variable de la superclase.

Pgina 27

INGENIERIA DE SISTEMAS PROGRAMACION III

En lo que concierne a clases, el polimorfismo en C++, llega a su mxima expresin cuando las usamos junto con punteros o con referencias. C++ nos permite acceder a objetos de una clase derivada usando un puntero a la clase base. En esa capacidad es posible el polimorfismo. Por supuesto, slo podremos acceder a datos y funciones que existan en la clase base, los datos y funciones propias de los objetos de clases derivadas sern inaccesibles. #include <iostream.h> #include <string.h> #include <stdio.h> class Persona { public: Persona(char *n) { strcpy(nombre, n); } void VerNombre() { cout << nombre << endl; } protected: char nombre[30]; }; class Empleado : public Persona { public: Empleado(char *n) : Persona(n) {} void VerNombre() { cout << "Emp: " << nombre << endl; }; class Estudiante : public Persona { public: Estudiante(char *n) : Persona(n) {} void VerNombre() { cout << "Est: " << nombre << endl; };

Void main() { Persona *Pepito = new Estudiante("Jose"); Persona *Carlos = new Empleado("Carlos"); Carlos->VerNombre(); Pepito->VerNombre(); delete Pepito; delete Carlos; }

Pgina 28

INGENIERIA DE SISTEMAS PROGRAMACION III

El ejemplo anterior demuestra algunas de las posibilidades del polimorfismo, pero tal vez sera mucho ms interesante que cuando se invoque a una funcin que se superpone en la clase derivada, se llame a sta ltima funcin, la de la clase derivada. En nuestro ejemplo, podemos preferir que al llamar a la funcin "VerNombre" se ejecute la versin de la clase derivada en lugar de la de la clase base. Esto se consigue mediante el uso de funciones virtuales. Cuando en una clase declaramos una funcin como virtual, y la superponemos en alguna clase derivada, al invocarla usando un puntero de la clase base, se ejecutar la versin de la clase derivada. Sintaxis: virtual <tipo> <nombre_funcin>(<lista_parmetros>) [{}]; Modifiquemos en el ejemplo anterior la declaracin de la clase base "Persona". class Persona { public: Persona(char *n) { strcpy(nombre, n); } virtual void VerNombre() { cout << nombre << endl; } protected: char nombre[30]; }; En el programa principal al llamar a "Pepito->VerNombre(n)" se invoca a la funcin "VerNombre" de la clase "Estudiante", y al llamar a "Carlos->VerNombre(n)" se invoca a la funcin de la clase "Empleado". Una vez que una funcin es declarada como virtual, lo seguir siendo en las clases derivadas, es decir, la propiedad virtual se hereda.

Pgina 29

INGENIERIA DE SISTEMAS PROGRAMACION III

Capitulo 3
MANEJO DE ERRORES: EXCEPCIONES Las excepciones son errores durante la ejecucin. Si uno de esos errores se produce y no implementamos el manejo de excepciones, el programa sencillamente terminar abruptamente. Es muy probable que si hay ficheros abiertos no se guarde el contenido de los buffers, ni se cierren, adems ciertos objetos no sern destruidos. En programas pequeos podemos prever las situaciones en que se pueden producir excepciones y evitarlos, pero en casos de peticin de memoria, como en la creacin de objetos, estas excepcionan provocaran fugas de memoria. Por eso es importante tener un control organizado de las excepciones para poder dar el debido mantenimiento al cdigo cuando lo requiera.

C++ utiliza tres comandos para el manejo de las excepciones: el try, throw y catch Sintaxis

try // bloque de condiciones y excepciones { (condicion) throw 1; //directamente en este caso se lanza una excepcin. (condicion) throw 2; //directamente en este caso se lanza una excepcin. . . . } catch(int var) // Se captura con un catch de enteros una de las excepciones declaradas con el throw. { If (var == 1) cout<<mensaje de error; // manejo de mensaje de error de acuerdo al caso If (var == 1) cout<<mensaje de error; // manejo de mensaje de error de acuerdo al caso . . . } }

Pgina 30

INGENIERIA DE SISTEMAS PROGRAMACION III

Ejemplo: manejo de excepciones. Cdigo en visual c++ #include<iostream> Using namespace std; int main() { String password, primerCaracter, ultimoCaracter; Int longitudPassword; Cout<<Introduce el Password; Cin>>password; longitudPassword=password.size(); //calculando el tamao del password primerCaracter=password.substr(0,1); // extrae la primera letra de la cadena ultimoCaracter=password.substr(longitudPassword -1,1); // extrae la ultima letra de la cadena try{ // condiciones If (longitudPassword<2) throw 0; // longitud menor de 2 cararcteres If (primerCaracter !=A) throw 1; // primer carcter distinta a la letra A If (ultimoCaracter !=Z) throw 2; // ultimo carcter distinta a la letra Z Cout<<Password correcta..\n; // en caso de que las condiciones no se cumplan } Catch (int error) { Cout<<Error..; If (error==0) Cout<<El password debe tener mas de un caracter..\n; If (error==1) Cout<<El primer carcter del password debe ser la letra A..\n; If (error==2) Cout<<El ultimo carcter del password debe ser la letra Z..\n; } Return 0; }

Pgina 31

INGENIERIA DE SISTEMAS PROGRAMACION III

Capitulo 4
PROGRAMACION VISUAL La programacin visual conocida como GUI Graphical User Interface, brinda los conocimientos necesarios para disear y desarrollar aplicaciones con un entorno visual amigable y fcil de utilizar para el usuario de tal manera que la tarea de los programadores, dado que con los primeros lenguajes de programacin crear una ventana era tarea de meses de desarrollo y de un equipo de trabajo. Existen IDEs (Integrated Development Enviroment Ambientes de Desarrollo Integrados) que permiten programar aplicaciones con ventanas, botones, y una serie de elementos visuales de manera sencilla y en paralelo con la programacin de la lgica de la aplicacin propiamente tal. Dependiendo del lenguaje de programacin que uno desee utilizar, existen distintos IDEs que utilizan uno u otro lenguaje. Java => Eclipse, NetBeans (Sun) C++, C#, Visual Basic => Microsoft Visual Studio (MS) Pascal => Delphi, Kylix (Borland) En esta oportunidad vamos a ver de forma bsica como crear una aplicacin de interfaz grafica para Windows, teniendo como base los conocimientos de programacin I y II que ya hemos cursado. Microsoft Visual C++ Visual C++ (tambin conocido como MvsC, Microsoft Visual C++) es un entorno de desarrollo integrado (IDE) para lenguajes de programacin C, C++ y C++/CLI. Visual C++ engloba el desarrollo de aplicaciones hechas en C, C++ y C++/CLI en el entorno Windows, incluye adems las bibliotecas de Windows (WinApi), las bibliotecas MFC y el entorno de desarrollo para .NET Framework. Visual C++ cuenta con su propio compilador (de igual nombre) y otras herramientas. Adems provee de bibliotecas propias de cada versin del sistema operativo y sockets.

Pgina 32

INGENIERIA DE SISTEMAS PROGRAMACION III

Pgina 33

INGENIERIA DE SISTEMAS PROGRAMACION III

Estas son las 3 principales ventanas que veremos al momento de desarrollar una aplicacin, la primera, la pantalla principal que nos permitir abrir o crear un nuevo proyecto. La segunda, la ventana de exploracin y diseo donde empezaremos a crear nuestra aplicacin aprovechando los diferentes componentes que nos ofrece visual C++; y por ultimo la ventana de codificacin a la cual accederemos en el momento de programa la accin que tendr algn componente o el formulario en si. En este capitulo de nuestro dossier utilizaremos materiales audiovisuales que nos permitirn conocer la estructura de este lenguaje, adems de una gua para la creacin de nuestra primera aplicacin en entorno Windows, de manera que no perdamos ningn detalle que de forma textual podamos olvidar.

Pgina 34

You might also like