Download programa orientada a objetos
Document related concepts
no text concepts found
Transcript
Programación Orientada a Objetos Ingeniero Anyelo Quintero Especialista en Dirección Prospectiva y Estratégica de las Organizaciones Universitarias Master en Ciencias de la Educación CONCEPTOS DE PROGRAMACION ORIENTADA A OBJETOS Los primeros programas se realizaban con instrucciones binarias de maquina, de modo que se cargaban en memoria a través de un conjunto de interruptores o a través de un teclado numérico. A medida que crecían los programas, se incrementaba su complejidad. Esto se comienza a resolver con un traductor llamado ensamblador (convierte los programas en ensamblador -- código de maquina) Sin embargo se necesitaban herramientas mas potentes. Lenguajes como FORTRAN, BASIC, PASCAL y C resolvieron esta complejidad. Con Pascal y C nació la programación estructurada facilitando la escritura de programas y disminuyendo la complejidad. Hoy día el aumento de potencia de las características de hardware y software (frecuencia de procesadores, capacidad de D.D, gráficos, conexión de redes, etc.) incrementando la complejidad de los programas. En la década de los 90 aparece la programación orientada a objetos como un nuevo medio para organizar código y datos y así establecer un control creciente sobre la complejidad del proceso de desarrollo de software. No es una idea nueva, sus conceptos ya existían en lenguajes como Simula 67 y Smalltalk. Las propiedades fundamentales de POO son: Objetos (abstracción de datos), herencia y polimorfismo. EVOLUCION DE LA PROGRAMACION PROGRAMACION LINEAL Los primeros lenguajes de programación se diseñaron para desarrollar tareas simples. Estos programas eran cortos. Menos de 100 líneas de código fuente. Las primeras versiones de lenguajes de programación lineal como BASIC, COBOL y FORTRAN no reutilizaban código existente, sino que se duplicaban segmentos de software. Se ejecutaban en forma lógica, su control era difícil y se producían saltos a lo largo del programa. Además no se podía controlar la visibilidad de los elementos dato. Todos los datos eran globales, por lo tanto podían ser modificados por cualquier parte del programa y así afectar el resultado del programa. No existían datos locales. Esto trajo como consecuencia la aparición de lenguajes estructurados (PASCAL, C, ADA…) así como una nueva estructura (procedimientos). Procedimiento: Programa o rutina que consiste en secuencias de instrucciones que realizan una tarea determinada. Desventajas. Los procedimientos necesitan muchos sistemas de comunicación entre si. PROGRAMACION MODULAR La solución consistió en romper los programas grandes en componentes mas pequeños construidos independientemente, luego se combina para formar el sistema completo. El soporte mas elemental de la programación modular es la subrutina (secuencia de instrucciones a las que se le da un nombre independiente; esta rutina se puede ejecutar incluyendo su nombre). PROGRAMACION ESTRUCTURADA •En la decada de los sesenta y principio de los setenta apareció la programación estructurada. •Los programas estructurados se organizan de acuerdo a las operaciones que se ejecutan •El programa se descompone en procedimientos individuales (funciones) cada uno de los cuales se descompone en subprocedimientos. •La información se pasa entre procedimientos utilizando parámetros. •Los procedimientos pueden tener datos locales a los que no se puede acceder desde fuera del ámbito del procedimiento. •Aislando los procesos dentro de funciones, un programa estructurado minimiza el riesgo de que un procedimiento afecte otro, facilitando la detección de problemas mediante la localización de errores. •Las variables globales desaparecen y se sustituyen por parámetros y variables locales. La programación estructurada introdujo el concepto de Abstracción (capacidad de examinar algo sin preocuparse de los detalles internos). El COMO se realiza una tarea no es importante mientras el procedimiento sea fiable. Todo esto se conoce como abstracción funcional. La debilidad aparece cuando varios programadores trabajan en una aplicación como un equipo. ( separación conceptual de datos y código) y datos mutuamente compartidos ABSTRACCION DE DATOS Es la extracción de las propiedades esenciales de un concepto. Los datos, las estructuras de datos e ítem se pueden utilizar sin preocuparse sobre los detalles de la implementación. Ejemplo: los números en coma flotante son abstracciones en todos los lenguajes de la programación, no tiene que preocuparse de la representación binaria. Las estructuras de datos y los tipos de datos son ejemplo de abstracción, los procedimientos y las funciones. Son otro ejemplo. PROGRAMACION ORIENTADA A OBJETOS Es un nuevo medio de organizar código y datos que aseguran un control creciente sobre la complejidad del proceso de desarrollo del software. Conjunto de técnicas que se pueden utilizar para hacer el desarrollo de programas mas eficiente mientras se mejora la fiabilidad de los programas. La POO es una técnica o estilo de programación que utiliza objetos como bloque esencial de construcción. Los objetos son en realidad como los tipos abstractos de datos. Un TAD es un tipo de dato definido por el programador con un conjunto de operaciones que se pueden realizar sobre ellos. Un TAD es diferente a los tipos de datos fundamentales o básicos (int, char, double, etc,) Propiedades Objetos Clases Conceptos Herencia Métodos Encapsulacion Mensajes Polimorfismo TRABAJANDO CON OBJETOS POO Programación Convencional programa Procedimientos Datos Componente Componente Componente Datos Parámetros Procedimientos Procedimientos Objetos Datos Datos y procedimientos. Se tratan separadamente Funciones Un objeto es una unidad que contiene datos y las funciones que operan sobre ellos. Un objeto es cualquier entidad del mundo real. Un objeto es un tipo abstracto de datos. Ejemplos de objetos: Objetos físicos: automóviles en una simulación de trafico, aviones en un sistemas de control aéreo, componentes electrónicos, animales mamíferos. Elementos de interfases gráficos de usuario: Ventanas, iconos, menús, objetos gráficos, ratones, teclados. Estructura de datos: Array, pilas, colas, árboles binarios. Tipos de datos definidos por el usuario Los objetos soportan características específicas. •Se agrupan en tipos denominados clases •Contienen datos internos que definen su estado actual •Soportan ocultación de datos •Pueden heredar propiedades de otros objetos •Pueden comunicarse con otros objetos enviando o pasando mensajes •Tienen métodos que definen su comportamiento DEFINICION DE OBJETOS Unidad que contiene datos y las funciones que operan sobre esos datos. Instancia de una clase Objeto (nombre) Computador Elemento (miembro) Marca: Acer Miembros dato RAM: 512 Mb Campos miembro Funciones Miembro o Miembros función o método Imprimir Transmitir información •Los datos y funciones se encapsulan en una única entidad. •Los datos están ocultos y solo mediante las funciones miembro es posible acceder a ellos. •Los objetos de un programa se comunican entre si mediante el paso o envío de mensajes (acciones que debe ejecutar un objeto). •La encapsulacion y ocultación de datos son utilizados en los objetos. •Un campo miembro se representa por un rectángulo y una función por un hexágono •Los datos y las funciones están ocultas es decir encapsuladas •Los campos o funciones que se extienden fuera del cuadro son accesibles, desde el exterior y actúan de interfaz CLASES Los objetos son miembros de clases, son instancias. Una clase es un tipo definido por el usuario que determina las estructuras de datos y las operaciones asociadas con este tipo. Las clases son como plantillas o modelos que describen como se construyen ciertos tipos de objetos. Clases es una colección de objetos similares, pueden tener muchas instancias y cada una es un objeto independiente. Es un modelo que se utiliza para escribir uno o mas objetos del mismo tipo. EJEMPLO: Clase de ventana Miembros de datos: pos x, posy, tipo - ventana, tipo - borde, color ventana. Funciones miembro: mover – horizontal, Mover – vertical. Un objeto de la clase ventana es una ventana específica. datos x, y; desplegable; línea doble, amarilla. El envío de un mensaje a una instancia de una clase produce la ejecución de un método Mensajes: activación de objetos. Un mensaje es una petición de un objeto a otro objeto para que este se comporte de una determinada manera, ejecutando uno de sus métodos. La técnica de enviar mensajes se conoce como paso de mensajes. Un mensaje consta de tres partes: la identidad del objeto receptor, el método (función miembro) del receptor cuya ejecución se ha solicitado y cualquier otra información adicional que el receptor necesite para ejecutar el método requerido. (Información dada en forma de parámetros). Sintaxis “Terminal 1 imprimir hola mundo” Receptor método parámetros. Nombre_del_ objeto. Función_ miembro o método(parametros). Computador Nombre Obtiene el nombre del alumno Curso mensaje Leer nombre Visualiza el nombre Imprimir alumno.imprimir() Sin parametros Enviar el mensaje imprimir al objeto alumno. El objeto alumno reacciona al mensaje ejecutando la función miembro imprimir. El mensaje podría llevar unos parámetros. alumno. leer nombre (“Luis Alfredo”) Sin los mensajes los objetos no se podrán comunicar con otros objetos. El paso de mensajes es sinónimo de llamada a una función. PROGRAMA ORIENTADA A OBJETOS • Un POO es una colección de clases. • Un POO necesita de una función principal que cree objetos y comience la ejecución con la invocación de sus funciones miembro. • En una aplicación se requieren archivos diferentes. • En un archivo se especifican las clases. • La función principal en un archivo diferente. • El compilador ensambla los archivos independientes en una unidad. Cuando se ejecuta un programa orientado a objetos ocurren tres acciones: 1. Se crean objetos cuando se necesiten 2. Los mensajes se envían desde unos objetos y se reciben en otros. 3. Se borran objetos cuando ya no son necesarios y se recupera la memoria ocupada por ellos. Herencia Es una característica de las clases. Permite a los objetos construirse a partir de otros objetos. Ej: las clases se dividen en subclases. Animales Mamiferos Insectos Anfibios Pajaros Cada sub clase comparte características de la clase que deriva. Vehiculo Automóvil Camión Autobús Características comunes (motor, ruedas) Motocicleta Tienen sus propias características CLASE BASE Característica A Característica B Característica A Característica B Característica C Característica A Característica B Característica D Característica E CLASES DERIVADAS Característica A Característica B Característica F La herencia permite definir nuevas clases a partir de clases ya existentes. La herencia impone una relación jerárquica entre clases en el cual una clase hija hereda de su clase padre. Si una clase solo puede recibir características de otra clase base, la herencia se denomina herencia simple. Si una clase recibe propiedades de más de una clase base, la herencia se denomina herencia múltiple. Figura Geométrica Calcular superficie Circulo Calcular radio (r) Proporciona el valor cero Calcular superficie se recibe de la clase base por herencia Rectángulo Triangulo Calcular superficie Lados x,y Calcular superficie base y altura POLIMORFISMO Se refiere a que una misma operación puede tener diferente comportamiento en diferentes objetos o diferentes objetos reaccionan al mismo mensaje de modo diferente. Ejemplo: la operación sumar, puede sumar en un objeto dos números X + y (enteros, flotantes), pero también puede sumar dos cadenas concatenación. Ejemplo: un numero de figuras geométricas responden todas al mensaje dibujar de modo diferente ya que son figuras diferentes. REUTILIZACION Una vez que la clase se ha escrito, creada , depurada se puede difundir entre otros programadores para que la puedan utilizar en otros programas. En POO la herencia incorpora el concepto de reutilización, los objetos en POO son fácilmente reutilizables y es una razón para utilizar esta metodología. CONCEPTO DE UNA CLASE Una clase es un tipo de dato que contiene una o mas elementos dato llamado miembros dato, y cero, una o mas funciones que manipulan esos datos (llamados miembro función o funciones miembro) Una clase se puede definir con una estructrura (struct), una union (union) o una clase (class). Sintaxis: class nombre_clase { Miembro 1; Miembro 2; Miembro 3; ………….. Función _Miembro_1 ( ); Función _ Miembro_2 ( ); }; Los objetos o instancias de una clase se definen así: Nombre_clase instancia_1; // instancia_1 es una instancia de la clase tipo nombre_clase. Un puntero o referencia a un objeto proporciona medios indirectos para acceder a un objeto, no son instancias de una clase. Una clase es sintacticamente igual a una estructura, con la única diferencia de que en el tipo class todos los miembros son por defecto privados mientras que en el tipo struct son por defecto públicos. Existen 3 formas de declarar objetos: primer forma class cliente { char nombre [40]; char num; }; cliente comprador; // comprador es un objeto // una variable de la clase // y una instancia de la clase cliente Segunda forma class cliente { char nombre [40]; char num; }comprador; Tercer forma class cliente { char nombre [40]; char num; }; main() { cliente comprador; return 0; } Componentes de una clase Una definición de una clase consta de dos partes: 1. Una declaración: lista de miembros de la clase 2. Una implementación: define las funciones de la clase Declaración de la clase class contador { long cuenta; public: void leervalor(long); long obtenervalor(long); }; Implementación de una clase void contador::leervalor(long valor) { cuenta=valor; } long contador::obtenervalor() { return cuenta; } TALLER • Diseñar un programa que determine el valor total de la compra sabiendo el valor unitario, una cantidad y un iva(16%). La clase debe llamarse compra. • Diseñar un programa que convierta dólares a pesos • Diseñar un programa que realice la conversión de grados Celsius a Farenheit F= 9/5 C +32 • Diseñar un programa para convertir metros a pies y pulgadas. 1 M=39.27 pulgadas; 1 pie= 12 pulgadas ESTRUCTURA WHILE ESTRUCTURA SWITCH ESTRUCTURA SWITCH - 2 Ejercicio FUNCIONES MIEMBRO Las funciones miembro son miembros de una clase y son las funciones diseñadas para implementar las operaciones permitidas, sobre los tipos de datos de una clase. Las funciones miembro de una clase pueden ser de diferentes tipos: 1. Funciones Miembro Simples 2. Funciones Miembro Estáticas 3. Funciones Miembro const. 4. Funciones Miembro volatile 5. Funciones Miembro en Línea (in line) 6. Funciones Miembro const this 7. Funciones Miembro volatile this 8. Funciones Virtuales 9. Funciones Especiales: Constructor y Destructor. 10. Funciones Operador 11. Funciones Amigas CONSTRUCTOR Un constructor es una función especial que sirve para construir o inicializar objetos. Con un constructor se inicializan automáticamente los objetos. En c++ la inicialización de objetos no se puede realizar en el momento en que son declarados, sin embargo tiene una característica muy importante y es disponer de una función llamada constructor que permite inicializar objetos en el momento en que se crean. Un constructor es una función que sirve para construir un nuevo objeto y asignar valores a sus miembros dato, se caracteriza por: •Tener el mismo nombre de la clase que inicializa •Puede definirse in line o fuera de la clase •No devuelve valores •Puede admitir parámetros como cualquier otra función •Puede existir mas de un constructor, e incluso no existir. Los constructores pueden implicar tres escenarios: Crear objetos con inicialización por defecto Crear objetos con inicialización especifica Crear objetos por copia de otros objetos Llamando a Constructores C++ llama siempre a las funciones constructores cuando se define el objeto. El modo en que se define las instancias de la clase controlan el constructor que se llama. El constructor sin argumentos se llama cuando se define una instancia pero no se especifica ningún valor inicial. Constructores por Defecto (dentro de la clase) El constructor por defecto es un constructor que no acepta argumentos. Dado que no toma argumentos, se deduce que cada clase solo tiene un constructor por defecto. EJERCICIO Digitar el código del siguiente ejercicio y explicar en que consiste JAVA Introducción Plataforma de software desarrollada por Sun Microsystems. Esta plataforma ha sido desarrollada de tal manera que los programas desarrollados para ella puedan ejecutarse de la misma forma en diferentes tipos de arquitecturas y dispositivos computacionales. La plataforma Java se divide en 3 partes: Lenguaje de programación. Máquina Virtual Java API Java Es un lenguaje de programación orientada a objetos puro diseñado para su uso en Internet. Se parece mucho a C++, pero adopta algunas ideas de Smalltalk. Los programas se ejecutan por medio de un intérprete que ha sido incorporado a los navegadores de Internet más usuales. A finales del siglo XX, Java llegó a ser el lenguaje de mayor acogida para programas de servidor. Utilizando una tecnología llamada JSP (basada en ASP de Microsoft), se hizó muy fácil escribir páginas dinámicas para sitios de Internet. Sumado a esto, la tecnología de JavaBeans, al incorporarse con JSP, permitía utilizar el patrón MVC (Modelo-Vista-Controlador) que ya tanto se había aplicado a interfaces gráficas. Java llegó a ser extremadamente popular cuando Sun Microsystems introdujo el J2EE (Java 2 Enterprise Edition) en la que incluía la tecnología de Enterprise Java Beans (EJB) que es una tecnología de objetos distribuídos, logrando por fin el sueño de muchas empresas como Microsoft e IBM de crear una plataforma de objetos distribuídos con un monitor de transacciones. Con este nuevo estándar, empresas como BEA, IBM, Sun Microsystems, Oracle y otros crearon nuevos "servidores de aplicaciones" que tuvieron gran acogida en el mercado. Además de programas del servidor, Java permite escribir programas de interfaz gráfica o textual. Además se pueden correr programas de manera incorporada a los navegadores de Internet, aunque esto nunca llegó a popularizarse como se esperaba. Programas en Java generalmente son compilados y luego interpretados por una máquina virtual. Esta última sirve como una plataforma de abstracción entre la máquina y el lenguaje permitiendo que se pueda "escribir el programa una vez, y correrlo en cualquier lado". También existen compiladores nativos de Java, tanto comercial como libre. El compilador GCC de GNU compila Java con algunas limitaciones (año 2002).