Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En Sistemas Computacionales
Unidad I
Conceptos bsicos del modelo orientado a objetos 1.1.- Reconocimi9ento de los Objetos y Clases en el mundo real y la Iteracin entre ellos. 1.2.- La Abstraccin y el Encapsulamiento como proceso natural 1.3.- La POO y la complejidad del Software 1.4.- Conceptos del ciclo de vida del software 1.5.- Elementos primordiales en el modelo de objetos
1.1.- Reconocimi9ento de los Objetos y Clases en el mundo real y la Iteracin entre ellos.
Objeto
Las personas tienen una idea clara de lo que es un objeto: conceptos adquiridos que nos permiten sentir y razonar acerca de las cosas del mundo. Un objeto podra ser real o abstracto, por ejemplo una organizacin, una factura, una figura en un dibujador, una pantalla de usuario, un avin, un vuelo de avin, etc. En el anlisis y diseo orientados a objetos (OO), interesa el comportamiento del objeto. Si se construye software, los mdulos de software OO se basan en los tipos de objetos. El software que implanta el objeto contiene estructuras de datos y operaciones que expresan dicho comportamiento. Las operaciones se codifican como mtodos. Las representacin en software OO del objeto es entonces una coleccin de tipos de datos y objetos. Entonces, dentro del software orientado a objeto, un objeto es cualquier cosa, real o abstracta, acerca de la cual almacenamos datos y los mtodos que controlan dichos datos. Un objeto puede estar compuesto por otros objetos. Estos ltimos a su vez tambin pueden estar compuestos por otros objetos. Esta intrincada estructura es la que permite construir objetos muy complejos.
Tipo de Objeto
Los conceptos que poseemos se aplican a tipos determinados de objetos. Por ejemplo, empleado se aplica a los objetos que son personas empleadas por alguna organizacin. Algunas instancias de empleado podran ser Juan Prez, Jos Martnez, etc. En el anlisis orientado a objetos, estos conceptos se llaman tipos de objetos; las instancias se llaman objetos. As, un tipo de objeto es una categora de objeto, mientras que un objeto es una instancia de un tipo de objeto. En el mundo de las bases de datos existen los tipos de entidad, como cliente o empleado. Existen muchas instancias de cada tipo de entidad (como Juan Prez o Jos Martnez para el tipo de entidad empleado). Del mismo modo, en OO se define tipos de objetos e instancias de tipo de objeto. Sin embargo, el trmino objeto tiene diferencias fundamentales con el trmino entidad, ya que la entidad slo se refiere a los datos, mientras que objeto se refiere a los datos y a los mtodos mediante los cuales se controlan a los propios datos. En OO, la estructura de datos y los mtodos de cada tipo de objeto se manejan juntos. No se puede tener acceso o control de la estructura de datos excepto mediante los mtodos que forman parte del tipo de objeto.
Identificar los objetos. Para ello examine la aplicacin e identifique las distintas
estructuras de datos, algunos tips a tener en cuenta son los siguientes: 1.- El nombre de la aplicacin a veces nos da la del nombre del objeto principal 2.- Los objetos software pueden imitar el mundo real, modelizando las propiedades de los objetos a travs de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a travs de variables. 3.- Los objetos no se han de corresponder siempre con objetos fsicos, sino que tambin pueden ser entidades que se utilizan dentro de la construccin del programa. 4.- Piense en el objeto en <<primera persona>>. Este truco nos puede identificar claramente los atributos y sus operaciones asociadas: <<Soy un cuadrado y me muevo, giro, agrando y reduzco. Las partes que me componen son los puntos de mis vrtices>>.
5.- Una clase es un tipo de dato que puede ser usado para declarar objetos, de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables.
Los objetos interactan para realizar colectivamente los servicios ofrecidos por las aplicaciones. Los diagramas de interaccin muestran cmo se comunican los objetos en una interaccin
Clase
El trmino clase se refiere a la implantacin en software de un tipo de objeto. El tipo de objeto es una nocin de concepto. Especifica una familia de objetos sin estipular la forma en que se implanten. Los tipos de objetos se especifican durante el anlisis OO. As, una clase es una implantacin de un tipo de objeto. Especifica una estructura de datos y los mtodos operativos permisibles que se aplican a cada uno de sus objetos. Caractersticas: La clase define el mbito de definicin de un conjunto de objetos Cada objeto pertenece a una clase Los objetos se crean por instanciacin de las clases Cada clase se representa en un rectngulo con tres compartimientos: nombre de la clase atributos de la clase operaciones de la clase
Abstraccin de datos
Una caracterstica importante de cualquier lenguaje de programacin es la capacidad de crear tipos de datos definidos por el usuario. Aunque se pueden crear en C sus propios tipos, utilizando las palabras reservadas typedef y struct, los tipos resultantes no se pueden integrar fcilmente en el resto del programa. Adems, en C, slo se pueden definir los tipos en trminos
de datos; es decir, las funciones utilizadas para manipular esos tipos no son parte de la definicin del tipo. Una definicin de un tipo que incluye datos y funciones y el modo para encapsular los detalles, se conoce como tipo abstracto de dato. En C++ se implementa mediante el uso de tipos de datos definidos por el usuario, llamados clases. clase = datos + funciones Una diferencia importante entre C y C++, es que en C++ se pueden declarar funciones dentro de una estructura (no se requiere declarar punteros a funciones). Las estructuras pueden tener tambin especificadas regiones de acceso (medios en que se puede controlar el acceso a los datos). La abstraccin de datos en C++ se obtiene con los tipos de datos estructura (struct) y clase (class).
Concepto de clase
Una clase es un tipo de dato que contiene uno o ms elementos dato llamados miembros dato, y cero, una o ms funciones que manipulan esos datos (llamadas funciones miembro). Una clase se puede definir con struct, union o class. La sintaxis de una clase es: class nombre_clase { miembro1; miembro2; ... funcion_miembro1(); funcion_miembro2(); ... }; Una clase es sintcticamente 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 pblicos.
Encapsulado de Datos
El empaque conjunto de datos y mtodos se llama encapsulado. El objeto esconde sus datos de los dems objetos y permite el acceso a los datos mediante sus propios mtodos. Esto recibe el nombre de ocultamiento de informacin. El encapsulamiento evita la corrupcin de los datos de un objeto. Si todos los programas pudieran tener acceso a los datos de cualquier forma que quisieran los usuarios, los datos se podran corromper o utilizar de mala manera. El encapsulado protege los datos del uso arbitrario y no pretendido. El encapsulado oculta los detalles de su implantacin interna a los usuarios de un objeto. Los usuarios se dan cuenta de las operaciones que puede solicitar del objeto, pero desconocen los detalles de cmo se lleva a cabo la operacin. Todos los detalles especficos de los datos del objeto y la codificacin de sus operaciones estn fuera del alcance del usuario. As, encapsulado es el resultado (o acto) de ocultar los detalles de implantacin de un objeto respecto de su usuario. El encapsulado, al separar el comportamiento del objeto de su implantacin, permite la modificacin de sta sin que se tengan que modificar las aplicaciones que lo utilizan.
1.3.- La programacin orientada a objetos (POO), intenta simular el mundo real a travs del significado de objetos que contiene caractersticas y funciones. Los lenguajes orientados a objetos se clasifican como lenguajes de quinta generacin.
Como su mismo nombre indica, la programacin orientada a objetos se basa en la idea de un objeto, que es una combinacin de variables locales y procedimientos llamados mtodos que juntos conforman una entidad de programacin. El termino encapsulacin se usa para describir la combinacin de estructuras de datos y de mtodos que son manipulados por el objeto. La llamada a un objeto es lo que se denomina pasar un "aviso" a un objeto. En la programacin orientada a objetos, encapsular significa, reunir y controlar el grupo resultante como un todo y no individualmente. En la programacin orientada a objetos la abstraccin es un termino externo al objeto, que controla la forma en que es visto por los dems. En la programacin orientada a objetos la modularidad se considera de la siguiente manera: Un programa grande siempre ser ms complicado que la suma de varios programas pequeos, con lo que se considera ventajoso dividir un gran sistema en diversos mdulos. En la programacin orientada a objetos tenemos la jerarqua, la cual consiste en la clasificacin y organizacin de las abstracciones segn su naturaleza. El ms claro ejemplo de jerarqua es la herencia. En la programacin orientada a objetos se define la herencia como una jerarqua de extracciones, y la relacin entre clases, donde se comparte la estructura y el comportamiento de una o ms clase considerada como clases superiores o una superclase, con lo cual se resume que la herencia es una unidad independiente por si misma heredada de una abstraccin o superclase. Un ejemplo cotidiano lo encontramos en las aplicaciones que existen actualmente en el mercado, donde un formulario cualquiera hereda las caractersticas de uan ventana del sistema operativo Windows (Maximizar, Minimizar, Cerrar).
Introduccin
l trmino de Programacin Orientada a Objetos indica ms una forma de diseo y una metodologa de desarrollo de software que un lenguaje de programacin, ya que en realidad se puede aplicar el Diseo Orientado a Objetos (En ingls abreviado OOD, Object Oriented Design), a cualquier tipo de lenguaje de programacin. El desarrollo de la OOP empieza a destacar durante la dcada de lo 80 tomando en cuenta la programacin estructurada, a la que engloba y dotando al programador de nuevos elementos para el anlisis y desarrollo de software.
El propsito de este trabajo es explicar el diseo orientado a objeto y no una explicacin de su programacin, puesto que no nos alcanzara toda la currcula y semestre para hacerlo. Bsicamente la OOP permite a los programadores escribir software, de forma que est organizado en la misma manera que el problema que trata de modelizar. Los lenguajes de programacin convencionales son poco ms que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia. Si en algn punto del programa modificamos la estructura de los datos o la accin realizada sobre ellos, el programa cambia. La OOP aporta un enfoque nuevo, convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones. De esta forma, cualquier modificacin de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella, siendo esta una de la diferencias radicales respecto a la programacin estructurada. Para quienes no estn familiarizados con la programacin estructurada dir que una de las bases de esta escuela de programacin parte del diseo arriba abajo. En esta forma de diseo se descomponen los requerimientos del programa paso a paso, hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones. La OOP estructura los datos en objetos que pueden almacenar, manipular y combinar informacin. En resumen, la programacin estructurada presta atencin al conjunto de acciones que manipulan el flujo de datos (desde la situacin inicial a la final), mientras que la programacin orientada a objetos presta atencin a la interrelacin que existe entre los datos y las acciones a realizar con ellos. Muchos habrn odo comentarios sobre la incidencia de la OOP sobre la programacin convencional. Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicin del ensamblador sobre el cdigo de mquina. La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacin
Uniformidad. Ya que la representacin de los objetos lleva implica tanto el anlisis como el diseo y la codificacin de los mismos. Comprensin. Tanto los datos que componen los objetos, como los procedimientos que los manipulan, estn agrupados en clases, que se corresponden con las estructuras de informacin que el programa trata. Flexibilidad. Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar, cualquier cambio que se realice sobre ellos quedar reflejado automticamente en cualquier lugar donde estos datos aparezcan. Estabilidad. Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo. Reusabilidad. La nocin de objeto permite que programas que traten las mismas estructuras de informacin reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan. De esta forma, el desarrollo de un programa puede llegar a ser una simple combinacin de objetos ya definidos donde estos estn relacionados de una manera particular. Uno de los puntos clave a remarcar en esta introduccin es que la programacin orientada a objetos no sustituye a ninguna metodologa ni lenguaje de programacin anterior. Todos los programas que se realizan segn OOD se pueden realizar igualmente mediante programacin estructurada. Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas basadas en un interfase de usuario grfico como Windows, OS/2, x-Windows, etc. Es mucho ms sencillo
La POO puede llevarse a cabo con un lenguaje Orientado a Objetos. Para esto lo mas apropiado es utilizar directamente un lenguaje OO, ya que estos soportan los mecanismos y caractersticas que ya antes hemos expuesto tales como objetos, clases, mtodos, mensajes, herencias constituyen uno de los mecanismos ms potentes de la POO.
El lenguaje de programacin que hemos mencionado beneficia al desarrollo de software, ya que ofrece una forma mas natural de lograr el desarrollo de modelos utilizando clases, con esta programacin los programas tienen menos lneas de cdigo, menos sentencias de bifurcacin y mdulos son mas comprensibles por que reflejan de una forma clara la relacin existentes entre cada concepto a desarrollar y cada objeto que interviene en dicho desarrollo, y por consecuencia hasta cierto punto hace mas fcil la programacin.
Dificultad del proceso de desarrollo: tiene que haber coordinacin entre todos los
objetos, entre mas programadores mas dificultad, por lo que deben haber unos cuantos , y estos deben estar coordinados. Flexibilidad del software: este debe de ser exacto y especifico con la informacin del programa, debe de tener un rendimiento, una flexibilidad y por lo tanto una funcionalidad requerida. Comportamiento de sistemas discretos: el software se pone a prueba de errores y los efectos secundarios que puedan surgir deben ser corregidos o eliminados.
De la misma forma, la prctica acumulada en el diseo de modelos de ciclo de vida para situaciones muy diversas permite que nos beneficiemos de la experiencia adquirida utilizando el enfoque que mejor de adapte a nuestros requerimientos.
Para un adecuado control de la progresin de las fases de un proyecto se hace necesario especificar con suficiente precisin los resultados evaluables, o sea, productos intermedios que deben resultar de las tareas incluidas en cada fase. Normalmente estos productos marcan los hitos entre fases. A continuacin presentamos los distintos elementos que integran un ciclo de vida: Fases. Una fase es un conjunto de actividades relacionadas con un objetivo en el desarrollo del proyecto. Se construye agrupando tareas (actividades elementales) que pueden compartir un tramo determinado del tiempo de vida de un proyecto. La agrupacin temporal de tareas impone requisitos temporales correspondientes a la asignacin de recursos (humanos, financieros o materiales). Cuanto ms grande y complejo sea un proyecto, mayor detalle se necesitar en la definicin de las fases para que el contenido de cada una siga siendo manejable. De esta forma, cada fase de un proyecto puede considerarse un micro-proyecto en s mismo, compuesto por un conjunto de micro-fases.
Otro motivo para descomponer una fase en subfases menores puede ser el inters de separar partes temporales del proyecto que se subcontraten a otras organizaciones, requiriendo distintos procesos de gestin.
10
Cada fase viene definida por un conjunto de elementos observables externamente, como son las actividades con las que se relaciona, los datos de entrada (resultados de la fase anterior, documentos o productos requeridos para la fase, experiencias de proyectos anteriores), los datos de salida (resultados a utilizar por la fase posterior, experiencia acumulada, pruebas o resultados efectuados) y la estructura interna de la fase.
Entregables (" deliverables "). Son los productos intermedios que generan las fases. Pueden ser materiales (componentes, equipos ) o inmateriales (documentos, software). Los entregables permiten evaluar la marcha del proyecto mediante comprobaciones de su adecuacin o no a los requisitos funcionales y de condiciones de realizacin previamente establecidos. Cada una de estas evaluaciones puede servir, adems, para la toma de decisiones a lo largo del desarrollo del proyecto.
11
Requiere que la actividad del proyecto pueda descomponerse de manera que una fase no necesite resultados de las siguientes (realimentacin), aunque pueden admitirse ciertos supuestos de realimentacin correctiva. Desde el punto de vista de la gestin (para decisiones de planificacin), requiere tambin que se sepa bien de antemano lo que va a ocurrir en cada fase antes de empezarla.
La experiencia del desarrollo del prototipo y su evaluacin deben permitir la definicin de las especificaciones ms completas y seguras para el producto definitivo. A diferencia del modelo lineal, puede decirse que el ciclo de vida con prototipado repite las fases de definicin, diseo y construccin dos veces: para el prototipo y para el producto real.
12
El ciclo de vida en espiral puede considerarse como una generalizacin del anterior para los casos en que no basta con una sola evaluacin de un prototipo para asegurar la desaparicin de incertidumbres y/o ignorancias. El propio producto a lo largo de su desarrollo puede as considerarse como una sucesin de prototipos que progresan hasta llegar a alcanzar el estado deseado. En cada ciclo (espirales) las especificaciones del producto se van resolviendo paulatinamente. A menudo la fuente de incertidumbres es el propio cliente, que aunque sepa en trminos generales lo que quiere, no es capaz de definirlo en todos sus aspectos sin ver como unos influyen en otros. En estos casos la evaluacin de los resultados por el cliente no puede esperar a la entrega final y puede ser necesaria repetidas veces. El esquema del ciclo de vida para estos casos puede representarse por un bucle en espiral, donde los cuadrantes son, habitualmente, fases de especificacin, diseo, realizacin y evaluacin (o conceptos y trminos anlogos).
En cada vuelta el producto gana en madurez (aproximacin al final deseado) hasta que en una vuelta la evaluacin lo apruebe y el bucle pueda abandonarse.
13
o Ajustar las especificaciones del producto. Fase de construccin o Generar el producto o servicio pretendido con el proyecto. o Integrar los elementos subcontratados o adquiridos externamente. o Validar que el producto obtenido satisface los requisitos de diseo previamente definidos y realizar, si es necesario, los ajustes necesarios en dicho diseo para corregir posibles lagunas, errores o inconsistencias. Fase de mantenimiento y operacin o Operacin: asegurar que el uso del proyecto es el pretendido. o Mantenimiento (nos referimos a un mantenimiento no habitual, es decir, aquel que no se limita a reparar averas o desgastes habituales -este es el caso del mantenimiento en productos software, ya que en un programa no cabe hablar de averas o de desgaste):
14
Requerimiento: Caracterstica o Restriccin de un Sistema. Ingeniera de Requerimientos: Proceso sistemtico utilizado para derivar una definicin del sistema de software a ser desarrollado.
15
Solicitud
Definicin
Especificacin
Anlisis
16
Por su origen: Funcionales: Comportamiento de los distintos mdulos. No Funcionales: Restricciones del sistema (tiempo de respuesta, almacenamiento, casos de uso, logstica). Por su aparicin cronolgica: De anlisis (descubrimiento) y diseo. De mantenimiento.
Encontrar soluciones sin haber entendido los problemas. Problemas de gran escala: Los sistemas multi-versin y multi-programador deben tratarse diferente que sistemas pequeos. Telfono descompuesto. Requerimientos cambiantes.
17
Frecuentemente el cliente no sabe que quiere; se le inventan necesidades falsas. Tareas mal identificadas. Establecimiento de requerimientos como mero trmite.
18
Qu hacer para obtener una ER completa? Cmo descomponer el problema en fragmentos manejables? Cmo organizar la informacin para que sea entendida? Cmo comunicarse con todas las partes involucradas? Cmo se resolvern las necesidades en conflicto? Cundo detener el anlisis?
19
Los modelos orientados a objetos cuando se construyen en forma correcta, son fciles de comunicar, cambiar, expandir, validar y verificar. Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables.
Origen
Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cmputo Noruego en Oslo. Segn se informa, la historia es que trabajaban en simulaciones de naves, y fueron confundidos por la explosin combinatoria de cmo las diversas cualidades de diversas naves podan afectar unas a las otras. La idea ocurri para agrupar los diversos tipos
Realizados por: Ing. Jorge Eloy Toledo Coronel
20
de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamiento. Fueron refinados ms tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (y cuya primera versin fue escrita sobre Basic) pero diseado para ser un sistema completamente dinmico en el cual los objetos se podran crear y modificar "en marcha" en lugar de tener un sistema basado en programas estticos. La programacin orientada a objetos tom posicin como la metodologa de programacin dominante a mediados de los aos ochenta, en gran parte debido a la influencia de C++ , una extensin del lenguaje de programacin C. Su dominacin fue consolidada gracias al auge de las Interfaces grficas de usuario, para los cuales la programacin orientada a objetos est particularmente bien adaptada. En este caso, se habla tambin de programacin orientada a eventos. Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, y otros. La adicin de estas caractersticas a los lenguajes que no fueron diseados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del cdigo. Los lenguajes orientados a objetos "puros", p or otra parte, carecan de las caractersticas de las cuales muchos programadores haban venido a depender. Para saltar este obstculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en mtodos orientados a objetos, pero permitiendo algunas caractersticas imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparicin de Internet, y a la implementacin de la mquina virtual de Java en la mayora de navegadores.
Errneamente se le adjudica a la programacin imperativa clsica ciertos problemas como si fueran inherentes a la misma. Esos problemas fueron hacindose cada vez ms graves y antes de la programacin orientada a objetos diversos autores (de los que podemos destacar a Jourdon) encontraron soluciones basadas en aplicar estrictas metodologas de trabajo. De esa poca son los conceptos de cohesin y acoplamiento. De esos problemas se destacan los siguientes: Modelo mental anmalo. Nuestra imagen del mundo se apoya en los seres, a los que asignamos nombres sustantivos, mientras la programacin clsica se basa en el comportamiento, representado usualmente por verbos. Es difcil modificar y extender los programas, pues suele haber datos compartidos por varios subprogramas, que introducen interacciones ocultas entre ellos.
21
Es difcil mantener los programas. Casi todos los sistemas informticos grandes tienen errores ocultos, que no surgen a la luz hasta despus de muchas horas de funcionamiento. Es difcil reutilizar los programas. Es prcticamente imposible aprovechar en una aplicacin nueva las subrutinas que se disearon para otra. Es compleja la coordinacin y organizacin entre programadores para la creacin de aplicaciones de media y gran envergadura.
En la programacin orientada a objetos pura no deben utilizarse llamadas de subrutinas, nicamente mensajes. Por ello, a veces recibe el nombre de programacin sin CALL, igual que la programacin estructurada se llama tambin programacin sin GOTO. Sin embargo, no todos los lenguajes orientados a objetos prohben la instruccin CALL (o su equivalente), permitiendo realizar programacin hbrida, imperativa y orientada a objetos a la vez.
Objeto : entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad ("mtodos"). Corresponden a los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciacin es la lectura de estas definiciones y la creacin de un objeto a partir de ellas. Mtodo : algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecucin se desencadena tras la recepcin de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un mtodo puede producir un cambio en las propiedades del objeto, y/o la generacin de un "evento" con un nuevo mensaje para otro objeto del sis tema. Evento : un suceso en el sistema (tal como una interaccin del usuario con la mquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. Mensaje : una comunicacin dirigida a un objeto, que le ordena que ejecute uno de sus mtodos con ciertos parmetros asociados al evento que lo gener. Propiedad o atributo : contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto, y cuyo valor puede ser alterado por la ejecucin de algn mtodo. Estado interno : es una propiedad invisible de los objetos, que puede ser nicamente accedida y alterada por un mtodo del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos).
En comparacin con un lenguaje imperativo, una "variable" no es ms que un contenedor interno del atributo del objeto o de un estado interno, as como la "funcin" es un procedimiento interno del mtodo del objeto.
22
Caractersticas de la POO
Hay un cierto desacuerdo sobre exactamente qu caractersticas de un mtodo de programacin o lenguaje le definen como "orientado a objetos", pero hay un consenso general en que las caractersticas siguientes son las ms importantes (para ms informacin, seguir los enlaces respectivos): Abstraccin: cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cmo se implementan estas caractersticas. Los procesos, las funciones o los mtodos pueden tambin ser abstrados y cuando lo estn, una variedad de tcnicas son requeridas para ampliar una abstraccin. Encapsulamiento: tambin llamado "ocultacin de la informacin". Cada objeto est aislado del exterior, es un mdulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cmo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificacin por quien no tenga derecho a acceder a ellas, solamente los propios mtodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccin. La aplicacin entera se reduce a un agregado o rompecabezas de objetos. Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizar el comportamiento correspondiente al objeto que se est usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocacin de un comportamiento en una referencia producir el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecucin", esta ltima caracterstica se llama asignacin tarda o asignacin dinmica. Algunos lenguajes proporcionan medios ms estticos (en "tiempo de compilacin") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++. Herencia: las clases no estn aisladas, sino que se relacionan entre s, formando una jerarqua de clasificacin. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en rboles o enrejados que reflejan un comportamiento comn. Cuando un objeto pertenece a ms de una clase se llama herencia mltiple; esta caracterstica no est soportada por algunos lenguajes (como Java).
23
1.5.1.- Abstraccin .
Abstraccin de Datos: Introduccin
Los tipos definidos por el usuario o tipos abstractos de datos ( TAD) empaquetan elementos dato con las operaciones que se r ealizan sobre esos datos. C++ soporta los TAD con el tipo clase que puede ser implementado con estructuras, uniones y clases.
Abstraccin de datos
Una caracterstica importante de cualquier lenguaje de programacin es la capacidad de crear tipos de datos definidos por el usuario. Aunque se pueden crear en C sus propios tipos, utilizando las palabras reservadas typedef y struct, los tipos resultantes no se pueden integrar fcilmente en el resto del programa. Adems, en C, slo se pueden definir los tipos en trminos de datos; es decir, las funciones utilizadas para manipular esos tipos no son parte de la definicin del tipo. Una definicin de un tipo que incluye datos y funciones y el modo para encapsular los detalles, se conoce como tipo abstracto de dato. En C++ se implementa mediante el uso de tipos de datos definidos por el usuario, llamados clases. clase = datos + funciones Una diferencia importante entre C y C++, es que en C++ se pueden declarar funciones dentro de una estructura (no se requiere declarar punteros a funciones). Las estructuras pueden tener tambin especificadas regiones de acceso (medios en que se puede controlar el acceso a los datos). La abstraccin de datos en C++ se obtiene con los tipos de datos estructura (struct) y clase (class).
Concepto de clase
Una clase es un tipo de dato que contiene uno o ms elementos dato llamados miembros dato, y cero, una o ms funciones que manipulan esos datos (llamadas funciones miembro). Una clase se puede definir con struct, union o class. La sintaxis de una clase es: class nombre_clase { miembro1; miembro2; ... funcion_miembro1(); funcion_miembro2(); ... }; Una clase es sintcticamente 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 pblicos.
1.5.2.- Encapsulamiento.
El empaque conjunto de datos y mtodos se llama encapsulado. El objeto esconde sus datos de los dems objetos y permite el acceso a los datos mediante sus propios mtodos. Esto recibe el nombre de ocultamiento de informacin. El encapsulamiento evita la corrupcin de los datos de un objeto. Si todos los programas pudieran tener acceso a los datos de cualquier
Realizados por: Ing. Jorge Eloy Toledo Coronel
24
forma que quisieran los usuarios, los datos se podran corromper o utilizar de mala manera. El encapsulado protege los datos del uso arbitrario y no pretendido. El encapsulado oculta los detalles de su implantacin interna a los usuarios de un objeto. Los usuarios se dan cuenta de las operaciones que puede solicitar del objeto, pero desconocen los detalles de cmo se lleva a cabo la operacin. Todos los detalles especficos de los datos del objeto y la codificacin de sus operaciones estn fuera del alcance del usuario. As, encapsulado es el resultado (o acto) de ocultar los detalles de implantacin de un objeto respecto de su usuario. El encapsulado, al separar el comportamiento del objeto de su implantacin, permite la modificacin de sta sin que se tengan que modificar las aplicaciones que lo utilizan.
1.3.- La programacin orientada a objetos (POO), intenta simular el mundo real a travs del significado de objetos que contiene caractersticas y funciones. Los lenguajes orientados a objetos se clasifican como lenguajes de quinta generacin. Como su mismo nombre indica, la programacin orientada a objetos se basa en la idea de un objeto, que es una combinacin de variables locales y procedimientos llamados mtodos que juntos conforman una entidad de programacin. El termino encapsulacin se usa para describir la combinacin de estructuras de datos y de mtodos que son manipulados por el objeto. La llamada a un objeto es lo que se denomina pasar un "aviso" a un objeto. En la programacin orientada a objetos, encapsular significa, reunir y controlar el grupo resultante como un todo y no individualmente. En la programacin orientada a objetos la abstraccin es un termino externo al objeto, que controla la forma en que es visto por los dems.
1.5.3.- Modularidad
En la programacin orientada a objetos la modularidad se considera de la siguiente manera: Un programa grande siempre ser ms complicado que la suma de varios programas pequeos, con lo que se considera ventajoso dividir un gran sistema en diversos mdulos.
Ejemplos:
Void altas() { Accin Accin } Void bajas() { Accin Accin } Void modificaciones() { Accin Accin
25
Herencia
Un tipo de objeto de alto nivel puede especializarse en tipos de objeto de bajo nivel. Un tipo de objeto puede tener subtipos. Por ejemplo, el tipo de objeto persona puede tener subtipos estudiante y empleado. A su vez, el tipo de o bjeto estudiante puede tener como subtipo estudiante de pregrado y estudiante de postgrado, mientras que empleado puede tener como subtipo a acadmico y administrativo. Existe de este modo una jerarqua de tipos, subtipos, subsubtipos, etc. Una clase implanta el tipo de objeto. Una subclase hereda propiedades de su clase padre; una sub-subclase hereda propiedades de las subclases; etc. Una subclase puede heredar la estructura de datos y los mtodos, o algunos de los mtodos, de su superclase. Tambin tiene sus mtodos e incluso tipos de datos propios.
Ejemplo de Herencia:
26
Leer() Imprimir()
Leer() Imprimir()
Leer() Imprimir()
ARBOL DE HERENCIA
27
#include<iostream.h> #include<conio.h> #include<stdio.h> class hospital { protected: char nom[100][45],dir[100][45],sexo[100][45],trab[100][3]; int edad[100],i; char dep[100][3]; public: void leer(); void visualizar(); }; class consul_general:public hospital { protected: char edociv[100][10]; public: void leer(); void visualizar(); }; class especiales:public hospital { protected: char edociv1[100][10],dep_tra[100][45],especialidad[100][45]; public: void leer(); void visualizar(); }; class hospitalizacion:public hospital { protected: char area[100][30],tratamiento[100][45],edociv2[100][15]; public: void leer(); void visualizar(); }; void hospital::leer() {clrscr(); for (i=1;i<=10;i++) { cout<<"Nombre = "; gets(nom[i]); cout<<"Direccion = "; gets(dir[i]); cout<<"Edad = "; cin>>edad[i]; cout<<"Sexo = "; gets(sexo[i]); cout<<"Trabajador = "; gets(trab[i]); cout<<"Dependiente = "; gets(dep[i]); clrscr(); } } void hospital::visualizar() {clrscr(); for (i=1;i<=10;i++) { cout<<nom[i]; cout<<" "<<dir[i]; cout<<" "<<edad[i]; cout<<" "<<sexo[i]; cout<<" "<<trab[i];
28
cout<<" getch(); }
"<<dep[i]<<"\n";
} void consul_general::leer() {clrscr(); for(i=1;i<=10;i++) { cout<<"Estado Civil = "; gets(edociv[i]); } } void consul_general::visualizar() {clrscr(); for(i=1;i<=10;i++) { cout<<edociv[i]<<"\n"; getch(); } } void especiales::leer() {clrscr(); for(i=1;i<=10;i++) { cout<<"Dependencia = "; gets(dep_tra[i]); cout<<"Estado Civil = "; gets(edociv1[i]); cout<<"Especialidad = "; gets(especialidad[i]); } } void especiales::visualizar() {clrscr(); for(i=1;i<=10;i++) { cout<<dep_tra[i]; cout<<" "<<edociv1[i]; cout<<" "<<especialidad[i]<<"\n"; getch(); } } void hospitalizacion::leer() {clrscr(); for(i=1;i<=10;i++) { cout<<"Area = "; gets(area[i]); cout<<"Estado Civil = "; gets(edociv2[i]); cout<<"Tratamiento = "; gets(tratamiento[i]); } } void hospitalizacion::visualizar() {clrscr(); for(i=1;i<=10;i++) { cout<<area[i]; cout<<" "<<edociv2[i]; cout<<" "<<tratamiento[i]<<"\n"; getch(); } }
29
//*PROGRAMA PRINCIPAL*// void main() {int op; clrscr(); do{clrscr(); cout<<"Opcion ="; cin>>op; switch(op) { case 1:{ hospital paciente; paciente.leer(); paciente.visualizar(); break; } case 2:{ consul_general paciente; paciente.leer(); paciente.visualizar(); break; } case 3:{ especiales paciente; paciente.leer(); paciente.visualizar(); break; } case 4:{ hospitalizacion paciente; paciente.leer(); paciente.visualizar(); break; } } } while(op<5); }
1.5.5.- Polimorfismo .
El polimorfismo es una nueva caracterstica aportada por la OOP. Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre, diferencindolas nicamente en los parmetros de entrada. Dependiendo del objeto que se introduzca como parmetro de entrada, se elegir automticamente cual de las operaciones se va a realizar. Ya est habituado al operador <<suma>> que est presente en todos los lenguajes de programacin. Sin embargo, los operadores <<suma de fracciones>> y <<suma de nmeros complejos>> no existen en casi ningn lenguaje de programacin. Los lenguajes OOP permiten definir un operador <<suma>> tal que reconozca que tipo de objeto se le est aplicando, a travs de operaciones de objetos. Previamente deber definir la fraccin y el nmero complejo como una clase y la operacin suma como una operacin de una clase. Definiendo adecuadamente las operaciones suma de fracciones y suma de nmeros imaginarios, el operador suma devolver, en el caso que los operandos sean fracciones, una fraccin y , en el caso de los nmeros imaginarios, otros nmero imaginario.
30
Es posible extender el concepto e incluso definir operaciones como suma de bases de datos
El operador suma de base de datos. Aunque a primera vista la expresin C= A+B, siendo A y B bases de datos, nos pudiera parecer una extraordinaria simplificacin, nos conduce a la pregunta: Qu es la suma de una base d datos? Consideremos varias posibilidades: Introduccin de registros: Lo que exige que A y B tengan la misma estructura. Unin de campos: Aquellos campos que aparezcan en B pero no en A sern aadidos a C Alguna de estas dos opciones es verdaderamente una suma? Es decir Cumple las propiedades conmutativa, asociativa, de elemento neutro, etc.? Qu ocurre si sumo dos bases de datos con estructuras distintas? Como puede observar, la definicin de un operador sobre un tipo complejo de datos, intentando utilizar identificadores de operadores de datos simples, puede tener resultados impredecibles. Una de las ventajas ms importantes, sin entrar en la redefinicin de operadores es permitir la realizacin de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan. Gracias a la encapsulacin y el polimorfismo, aunque se utilicen los mismos nombre con las operaciones en dos clases distintas, el programa reconoce a que clase se aplica durante la ejecucin. Como se podr observar el polimorfismo y la encapsulacin de datos estn ntimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucin que ha supuesto la introduccin de los lenguajes orientados a objetos dentro de la programacin.
31
Animal dormir()
Dormir() { }
Len dormir()
Oso dormir()
Tigre dormir()
Dormir() { en un rbol }
Ejemplo de Polimorfismo #include<iostream.h> #include<conio.h> #include<stdio.h> #define pi 3.1416 class geometria { public: float area(float b,float h){return (b*h)/2;} float area(float r) {return(pi*(r*r));} float area(float b1,float b2, float h) {return ((b1+b2)/2)*h;} }; void main() { clrscr(); geometria dibujo; cout<<"\n"<<dibujo.area(3.2,6); cout<< "\n"<<dibujo.area(6.8); cout<< "\n"<<dibujo.area(4.8,6.2,6); getch(); }
32
PARADIGMAS DE PROGRAMACION
Un paradigma de programacin es un paradigma para los programas de computadora o ms generalmente el desarrollo de programacin del software o de los sistemas de software. Da la visin de que el programador tiene la ejecucin del programa: por ejemplo, en el caso de la programacin orientada a objetos, el programador considera la ejecucin del programa como coleccin de objetos. Un paradigma de programacin a menudo est conectado con cierta escuela de la arquitectura del software o similares y es asociado a menudo a cierta familia de lenguajes de programacin. Muchos lenguajes se disean para poner un paradigma en ejecucin. Por ejemplo, Smalltalk y
Realizados por: Ing. Jorge Eloy Toledo Coronel
33
Java se asocian a la programacin orientada a objetos, mientras que Haskell y Scheme se asocian a la programacin funcional. Otras idiomas, tales como Common Lisp, python, y Oz son para permitir el uso de paradigmas mltiples. La relacin entre los paradigmas y los lenguajes puede ser ms compleja, sin embargo; por ejemplo, C++ agrega aspectos de la programacin orientada a objetos a C, un lenguaje de programacin estructurado. A programming paradigm is often closely connected to a certain school of software architecture, software engineering or similar and is often associated with a certain family of programming languages. Many languages are designed to implement a particular paradigm. For instance, Smalltalk and Java are associated with object-oriented programming, while Haskell and Scheme are associated with functional programming. Other languages, such as Common Lisp, Python, and Oz are intended to allow the use of multiple paradigms. The relationship between paradigms and languages can be more complex, however; for instance, C++ adds aspects of Object-oriented programming to C, a structured programming language. Copiar y pegar programas no es considerado un paradigma.
34
35