Ciclo 1-2013 Introducción a la Programación UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLOGICOS ESCUELA DE COMPUTACION Material Semana 14 CICLO: 01-2013 " UNIDAD 10: Programación Orientada a Objetos (POO)” MATERIA: INTRODUCCIÓN A LA PROGRAMACIÓN Índice: Objetivos Específicos-------------------------------------------------------------------------------------------------------------------------2 Paradigmas de la Programación Orientada a Objetos (POO)----------------------------------------------------------------------2 A. ENCAPSULACIÓN-----------------------------------------------------------------------------------------------------------2 B. POLIMORFISMO-------------------------------------------------------------------------------------------------------------3 C. HERENCIA--------------------------------------------------------------------------------------------------------------------3 ¿Qué es un OBJETO?------------------------------------------------------------------------------------------------------------------------3 Clase-----------------------------------------------------------------------------------------------------------------------------------------------3 Objetos--------------------------------------------------------------------------------------------------------------------------------------------3 Creación de Clases y Objetos en Lenguaje C------------------------------------------------------------------------------------------5 Paso 1: definir a la Clase----------------------------------------------------------------------------------------------------5 Modificadores de Alcance de variables y funciones------------------------------------------------------------5 Miembros de una clase--------------------------------------------------------------------------------------------------6 Paso 2: Implementando los Objetos (instancias de una Clase)-------------------------------------------------6 Ejemplos de programación con POO-----------------------------------------------------------------------------------------------------7 "Bibliografía"-----------------------------------------------------------------------------------------------------------------------------------10 Facultad de Estudios Tecnológicos pagina 1 de 10 Ciclo 1-2013 Introducción a la Programación Objetivos Específicos Definir concepto de "Clase". Diferenciar la programación orientada a objetos (POO) con la Estructurada. Enumerar los conceptos de la POO: Objetos, Propiedades y Métodos. Paradigmas de la Programación Orientada a Objetos (POO) Los programas estructurados se basan en estructuras de control bien definidas (if, for, while, etc.), bloques de código, subrutinas (funciones) independientes que soportan recursividad y variables locales. La esencia de la programación estructurada es la reducción de un programa a sus elementos constituidos. La programación orientada a objetos (POO), permite descomponer un problema en subgrupos relacionados. Cada subgrupo pasa a ser una entidad (objeto) autocontenida, que consta de sus propias instrucciones y datos que le relacionan con ese objeto. Entre los objetivos de la POO se tienen los siguientes: 1. Aumentar la abstracción de los programas para una mejor comprensión 2. Modularización de componentes 3. Reducir la redundancia de código 4. Reducir los tiempos de implementación 5. Aumentar la fiabilidad mediante la reutilización de componentes Todos los lenguajes POO comparten tres características: Encapsulación, Polimorfismo y Herencia. A. ENCAPSULACIÓN Es el mecanismo que utiliza una clase para agrupar el código y los datos/informacion que maneja. Ademas mantiene protegidos a estos datos, ocultando la información frente a cualquier interferencia y mal uso. Cuando el código y los datos están enlazados de esta manera se ha creado un objeto. Ese código y datos pueden ser privados para ese objeto o públicos para otras partes del programa. Facultad de Estudios Tecnológicos pagina 2 de 10 Ciclo 1-2013 Introducción a la Programación B. POLIMORFISMO Es la cualidad que permite que un nombre se utilice para dos o más propósitos relacionados pero técnicamente diferentes. El propósito es poder usar un nombre para especificar una clase general de acciones. Por ejemplo en C tenemos tres funciones distintas para devolver el valor absoluto. Sin embargo en C++ incorpora Polimorfismo y a cada función se puede llamar abs().El Polimorfismo se puede aplicar tanto a funciones como a operadores . C. HERENCIA Proceso mediante el cual un objeto puede adquirir las propiedades de otro objeto. La información se hace manejable gracias a la clasificación jerárquica. ¿Qué es un OBJETO? Conjunto de variables y funciones pertenecientes a una clase encapsulados. A este encapsulamiento es al que se denomina objeto. Por tanto la clase es quien define las características y funcionamiento del objeto. Clase Una Clase se describe normalmente como la plantilla o el proyecto a partir del cual se hace/construye realmente el objeto. La forma normal de imaginarse a una clases es pensando en ella como una “plantilla” (por ejemplo, el plano/diseño para hacer un billete, o un avión) que explica “como funcionara un objeto cuando este se construya”; mientras que el “objeto” propiamente dicho es una representación real (por ejemplo, un billete de $20 o un Boing 747) obtenida a partir de dicha plantilla. Por lo tanto, una Clase es un tipo de Datos que contiene una serie de características, denominadas ATRIBUTOS y un comportamiento definido mediante MÉTODOS. Cuando se crea un objeto a partir de una clase, se dice que el programador ha creado una Instancia de dicha clase. Objetos Un Objeto es un elemento real o abstracto que tiene un estado, un comportamiento y una identidad. Un objeto es, pues, una mesa, un alumno, un avión, etc., porque estos son elementos reales y están bien definidos. También lo puede ser un concepto abstracto como un elemento llamado “Ordenador” que es capaz de recibir un conjunto de números y ordenarlos ascendente o descendentemente. Las características que definen un objeto son tres: • Identidad: Es la propiedad característica que tiene un objeto que le distingue de todos los demás Por ejemplo, para hacer referencia al alumno “Juan Diego Pérez” se puede seleccionar alguno de los datos que lo identifique durante toda su vida, como su nombre o su cédula de ciudadanía. Facultad de Estudios Tecnológicos pagina 3 de 10 Ciclo 1-2013 • Introducción a la Programación Estado: Viene determinado para el conjunto de propiedades o atributos que tiene el objeto (Estructura Estática), junto con los valores que pueden asumir cada uno de esos atributos (Estructura Dinámica). Ejemplo: Para el objeto alumno “Juan Diego Pérez”, se crearía en base a la clase siguiente: Clase: Alumno - Nombres y Apellidos - Edad - Sexo - Dirección - Curso - Asignaturas Su estructura dinámica en 1996: - Nombres y Apellidos: Juan Diego, Pérez - Edad : 15 - Sexo : Masculino - Dirección : Calle 94 # 55-17 - Curso : Noveno A - Asignaturas : Matemáticas, Español, Geografía, Historia Su estructura dinámica en 1997: - Nombres y Apellidos: Juan Diego, Pérez - Edad : 16 - Sexo : Masculino - Dirección : Calle 33 # 76A-35 - Curso : Décimo A - Asignaturas : Matemáticas, Español, Química, Física • Comportamiento: Viene determinado por la forma de actuar al recibir un mensaje para que realice una acción. Un Mensaje es una orden que se manda a un objeto para que realice una operación con un propósito específico, por medio de la invocación o llamada que se hace de los métodos del obje to. Un mensaje viene definido por tres componentes: - El objeto receptor del mensaje, es decir, al objeto que se envía el mensaje. - El selector del mensaje, que es la acción que se quiere que realice el objeto. - Los argumentos, que son los valores que se transmiten con el selector y que, en muchos casos, pue den ser nulos. Por ejemplo, el mensaje: Facultad de Estudios Tecnológicos pagina 4 de 10 Ciclo 1-2013 Introducción a la Programación Juan Diego Pérez. VerAsignaturasde(1996) Indica que se desea conocer las asignaturas en que estuvo matriculado el alumno “Juan Diego Pérez” en el año 1996. Creación de Clases y Objetos en Lenguaje C La base del encapsulamiento es la Clase, a partir de ellas se le dan las características (llamados ATRIBUTOS) y comportamiento (llamados METODOS) a los objetos. Bajo C, una Clase es un “tipo de Datos compuesto”. Haciendo una comparación entre los elementos de C vistos anteriormente con los elementos de una Clase, se puede establecer una similitud entre las variables (que serán los atributos de la clase) y las funciones (que conformaran a los métodos) Cuando se crea un objeto a partir de una clase, se dice que el programador ha creado una Instancia de dicha clase. Para crear una clase y crear un objeto en base a la misma, se realizan 2 pasos fundamentales. Paso 1: definir a la Clase Lo primero es crear la clase. Se definen las variables (que se consideran los Atributos) y las funciones (que serán los métodos que definen su comportamiento). Modificadores de Alcance de variables y funciones Las variables y funciones de una Clase pueden ser públicas, privadas o protegidas Por defecto si no se indica nada, estas serán privadas. Este alcance de los elementos de una Clase nos indica ¿En cuales partes de un programa se pueden utilizar las funciones y variables de la clase? y son los siguientes: private: Solo tendrán acceso los miembros de la misma clase donde estén definidos. public: Se pude hacer referencia desde cualquier parte del programa. protected: Se implementa con la Herencia de clases. Se puede hacer referencia dentro de la misma clase y las subclases. La definición de una Clase en C++ consiste de la palabra reservada class, seguida del nombre de la clase y finalmente el cuerpo de la clase encerrado entre llaves y finalizando con (;) El cuerpo de la clase contiene la declaración de los atributos de la clase (variables) y la declaración de los métodos (funciones), ver ejemplo a la derecha. Tanto los atributos como los métodos pertenecen exclusivamente a la clase y sólo pueden ser usados a través de un objeto de esa clase. Facultad de Estudios Tecnológicos pagina 5 de 10 Ciclo 1-2013 Introducción a la Programación Miembros de una clase Una clase está formada por un conjunto de miembros que pueden ser datos, funciones, clases anidadas, enumeraciones, tipos de datos, etc. Por el momento nos vamos a centrar en los datos y las funciones (Atributos y Métodos). Atributos Miembros Creación de una clase: Todos los atributos que forman parte de una clase deben ser declarados dentro de la misma. Tome en cuenta las reglas siguientes: class nomb_clase{ - Un miembro no puede ser declarado más de una vez. public: funciones y variables publicas; - No es posible añadir miembros después de la declaración de la clase. private: funciones y variables privadas; } Métodos Miembros Los métodos al igual que los atributos, deben ser definidos en la clase, pero el cuerpo de la función puede ir dentro o fuera de la clase. Si un método se declara completo dentro de la clase, se considera como inline. Para definir un método miembro (el cuerpo de la funcion) de una Clase fuera de la misma, se puede escribir luego del cierre de la definición de la clase. El método se define colocando el nombre de la clase a la cual está asociado y luego el nombre del método. Para esto se ocupa el operador de resolución de alcance (::) Observe el siguiente ejemplo: Ej 1: Metodo funX (en línea inline) y funY () Ej2: Metodo funY de la clase Miclase del Ej1, definido fuera de la declaración de la clase. Paso 2: Implementando los Objetos (instancias de una Clase) Ahora vamos a ver cómo es posible crear objetos o instancias de esa clase. Hay que recordar que una de las características de los objetos es que cada uno guarda un estado particular de acuerdo al valor de sus atributos. Facultad de Estudios Tecnológicos pagina 6 de 10 Ciclo 1-2013 Introducción a la Programación En la programación orientada a objetos, a las funciones son llamadas métodos y la invocación o llamada se conoce como mensaje. En C++ un objeto es una variable de un tipo definido por el usuario. Un objeto se puede crear dentro de las diferentes funciones creadas en el código fuente, por lo general en la función principal main. En resumen, observe a continuacion la sintaxis general para: a) Crear a una Clase y definir a sus funciones Miembros, para luego b) Crear a un objeto basado en esa clase especifica y como llamar/invocar a estas funciones (métodos de la clase). Y luego, analice los ejemplos de creación de clases e instanciación de objetos: Creación de una clase: class nomb_clase{ Creación del objeto: public: funciones y variables publicas; nomb_clase nombre_objeto1; nomb_clase nombre_objeto2; private: funciones y variables privadas; Llamadas a las funciones de una clase: } nombre_objeto.nomb_funcion(parámetros); Desarrollo de funciones miembro: val_devuelto nomb_clase::nomb_funcion(parametros){ cuerpo; } Ejemplos de programación con POO Ejemplo 1: Como ejemplo, crearemos el primer programa utilizando objetos y clases para ver la teoría llevada a la práctica. #include <stdio.h> #include <stdlib.h> //definiendo a la funcion principal main main() //definicion de la clase miclase class miclase{ { /*instanciando a 2 variables objetos prívate: //atributos privados de la clase miclase*/ int a; miclase obj1, obj2; public: //metodos publicos system("cls"); void pasar_a(int num); Facultad de Estudios Tecnológicos /*se envian mensajes a cada objeto obj1 y obj2, por medio de la pagina 7 de 10 Ciclo 1-2013 int mostrar_a(); }; Introducción a la Programación llamada del método público (pasar_a) de cada uno*/ obj1.pasar_a(10); //definiendo métodos de la clase (miclase) void miclase::pasar_a(int num) { obj2.pasar_a(99); /*se envian mensajes a ambos objetos, para que muestren el valor de atributo privado (a) por medio de la llamada del método público (mostrar_a) de la clase miclase*/ a=num; printf("%d\n",obj1.mostrar_a()); }//fin método pasar_a de función mi clase printf("%d\n",obj2.mostrar_a()); int miclase::mostrar_a() { system("pause"); }//fin función main return a; }//fin método mostrar_a de función mi clase * Nota: system(“cls”): Se utiliza para limpiar la pantalla, para este ejemplo es innecesaria esa línea. Ejemplo # 2: Realizar una aplicación en C que calcule la suma de 2 números introducidos por el usuario, la operación debe implementarse en una Clase llamada: Suma, y a la vez Suma debe de tener un método llamado: calcular, que reciba 2 parametros enteros(a y b) y retorne el valor entero del total de la suma. #include <stdio.h> //definiendo a la funcion principal main #include <conio.h> int main() #include <iostream.h> { int a, b; //definición clase Suma //creando objeto s basado en clase Suma class Suma Suma s; { // atributos de la clase Suma cout<<"Digite el número a: "; double resultado; //alcance privado cin>>a; cout<<"Digite el número b: "; public: cin>>b; // métodos públicos de clase Suma //llamando método calcular del objeto s int calcular(int a, int b); cout << "La suma de a + b es: " << s.calcular(a, b) << endl; }; getch(); // implementación de método Suma Facultad de Estudios Tecnológicos } pagina 8 de 10 Ciclo 1-2013 Introducción a la Programación int Suma::calcular(int a, int b) { return (a + b); } Ejemplo # 3: Este pequeño programa trata de calcular el área y la longitud de una circunferencia. Es sencillo y usa clases e instancias de objetos. #include<iostream.h> #include<stdlib.h> const double pi=3.141516; class calcular{ double radio,area,longitud; public: void iniciar(void); void entradaDatos(void); void salidaDatos(void); } calcular1; main(void) { calcular calcular2; calcular1.iniciar(); calcular2.iniciar(); calcular1.entradaDatos(); calcular2.entradaDatos(); calcular1.salidaDatos(); calcular2.salidaDatos(); system("pause"); } void calcular::iniciar(void) { cout <<"PROGRAMA QUE CALCULA EL AREA Y LONGITUD DE UNA CIRCUNFERENCIA"<<"\n\n"; } void calcular::entradaDatos(void) { Facultad de Estudios Tecnológicos pagina 9 de 10 Ciclo 1-2013 Introducción a la Programación cout<<"INTRODUZCA EL RADIO DE LA CIRCUNFERENCIA"<<"\n"; cin>>radio; area=pi*radio*radio; longitud=2*pi*radio; } void calcular::salidaDatos(void) { cout<<"AREA =\t\t" <<area <<"\n"; cout<<"LONGITUD =\t\t" <<area <<"\n\n"; } "Bibliografía" 1. Fundamentos de programación Autor: Ortiz, Alma Lissette, No clasificación: Trab: 005.1 0771999 Editorial: UDB 2. Introducción a la informática: Programas Autor: Ruiz Coello, Roberto No. Clasificación: Trab 001.6403 R934 1999 Editorial UDB 3. Fundamentos de programación (Algoritmos y estructuras de datos) Autor: Luis Joyanes Aguilar, Mc Graw Hill, 1999 4. Programación y resolución de problemas con C++ Nell Dale, Chip Weems, Cuarta edición, Mc Graw Hill, 2007 5. http://c.conclase.net/?id=vercodigo 2008 Facultad de Estudios Tecnológicos pagina 10 de 10