Vous êtes sur la page 1sur 13

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

adfsfsf UNIDAD I FUNDAMENTOS DE PROGRAMACION ORIENTADA A OBJETOS

1.1. EVOLUCION DE LA PROGRAMACION


C++ fue una evolucin de C, el cual surgi de dos lenguajes de programacin previos, BCPL y B.BCPL fue desarrollado en 1967 por Martin Richards como lenguaje para escribir software de sistemas operativos y compiladores. Ken Thompson modelo muchas caractersticas de su lenguaje B segn sus equivalentes en BCPL y se vali de B para crear las primeras versiones del sistema operativo UNIX en los Laboratorios Bell durante 1970 es una computadora DEC PDP-7. Tanto BCPL como B eran lenguajes sin tipos-cada elemento de informacin ocupaba una palabra en memoria y la tarea de tratar cada elemento de datos como numero entero o numero real, por citar un ejemplo, recaa en el programador. El lenguaje C fue una evolucin de B elevada a cabo por Dennis Ritche en los Laboratorios Bell y originalmente se implemento en una computadora DEC PDP-11 en 1972. C se vale de muchos conceptos bsicos de BCPL y de C, aadiendo tipos de datos y otras caractersticas. Al principio C se volvi ampliamente conocido como el lenguaje de desarrollo del sistema operativo UNIX. Actualmente, la mayora de los sistemas operativos se escribe en C y/o C++. Durante las ultimas dos dcadas, C ha quedado disponible en casi todas las computadoras. C es independiente del hardware. Con un diseo cuidadoso, es posible escribir programas en C que pueden ser potables para utilizarse en la mayora de las computadoras. Hacia finales de los 70, C evolucion en lo que hoy se conoce como C tradicional, C clsico o C de Kernighan y Ritchie. La publicacin que hizo Prentice Hall en 1978 del libro de Kernighan y Ritchie, The C programming Language, llamo ampliamente la atencin al lenguaje (Ke78). La amplia difusin de C a varios tipos de computadoras (a veces llamados plataformas de hardware), por desgracia, tuvo como consecuencia que hubiera demasiadas variantes. Eran parecidas, pero frecuentemente incompatibles. Este era un serio problema para los desarrolladores de programas. Quedo claro que se requera de una versin estndar de C. En 1983 se creo el comit tcnico X3J11 bajo el ANSI en Computadoras y Procesamiento de Informacin (X3) para proporcionar al lenguaje una definicin inequvoca e independiente del equipo. En 1989 se aprob el estndar. ANSI coopero con la ISO en la estandarizacin mundial de C; el documento conjunto del estndar se publico en 1990 y se conoce como ANSI/ISO 9899: 1990. Es posible solicitarle a ANSI copias de este documento. La segunda edicin de Kernighan y Ritchie, publicada en 1988, refleja esta versin llamada ANSI C, empleada en todo el mundo (Ke88). A principios de dcada de los 80, Bjarne Stroustrup desarrollo a C++, una extensin de C, en los laboratorios Bell. C++ ofrece una serie de caractersticas que engalanan al lenguaje C; sin embargo, lo mas importante es que proporcionan capacidades para la programacin orientada a objetos. Se est gestando una revolucin en la comunidad del software. La construccin rpida, correcta y econmica de software sigue siendo una meta esquiva, y sucede que sta en una poca en la que la demanda de software nuevo y mas poderoso crece desmesuradamente. Los objetos son, en esencia, componentes de software reutilizables que simulan elementos reales.

Los desarrolladores de software estn descubriendo que, al valerse de un enfoque de diseo e implementacin modular y orientado a objetos, es posible hacer mucho mas productivos a los
____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

grupos de desarrollo de lo que serian con las tcnicas precias comunes de programacin, como la programacin estructurada. Los programas orientados a objetos son ms fciles de entender, corregir y modificar. Se han desarrollado muchos otros lenguajes orientados a objetos, incluyendo principalmente Smalltalk, que fue desarrollado en el Centro de investigacin de Palo Alto (PARC) de Xerox. Smalltalk en un lenguaje orientado a objetos puro literalmente todo es un objeto. C++ es un lenguaje hbrido es posible programar en C++ tanto en estilo C como en estilo orientado a objetos o en ambos.

Conceptos fundamentales de la programacin orientada a objetos


Ahora vamos a entrar a fondo en lo que constituye la mayor diferencia entre C y C++: las clases. As que preprate para cambiar la mentalidad, y el enfoque de la programacin tal como lo hemos visto hasta ahora. Iremos introduciendo nuevos conceptos que normalmente se asocian a la programacin orientada a objetos, como son: objeto, mensaje, mtodo, clase, herencia, interfaz, etc.

POO:

Siglas de "Programacin Orientada a Objetos". En ingls se pone al revs "OOP". La idea bsica de este tipo de programacin es agrupar los datos y los procedimientos para manejarlos en una nica entidad: el objeto. Un programa es un objeto, que a su vez est formado de objetos. La idea de la programacin estructurada no ha desaparecido, de hecho se refuerza y resulta ms evidente, como comprobars cuando veamos conceptos como la herencia. MECANISMOS BASICOS DE LA POO Los mecanismos bsicos de la programacin orientada a objetos son:

Objeto:

Un objeto es una unidad que engloba en s mismo datos y procedimientos necesarios para el tratamiento de esos datos. Hasta ahora habamos hecho programas en los que los datos y las funciones estaban perfectamente separadas, cuando se programa con objetos esto no es as, cada objeto contiene datos y funciones. Y un programa se construye como un conjunto de objetos, o incluso como un nico objeto.

QUE ES UN OBJETO?
El termino objeto surgi casi independientemente en varios campos de la informtica, simultneamente a principios de los sesenta, para referirse a nociones que eran diferentes en su apariencia, pero relacionados entre s. Todas estas nociones se inventaron para manejar la complejidad de sistemas software de tal forma que los objetos representaban componentes de un sistema descompuesto modularmente o bien unidades modulares de representacin del conocimiento.

Desde temprana edad las personas nos formamos conceptos, cada concepto es una idea particular o una comprensin de nuestro mundo, los conceptos adquiridos nos permiten sentir y razonar a cerca de las cosas en el mundo. A estas cosas a las que se aplican nuestros conceptos se llaman objetos. Un objeto puede ser real o abstracto, como: Una factura

____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

Una organizacin Una figura en un programa Un avin Etc.

Un objeto es cualquier cosa, real o abstracta, a cerca 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, pueden estar compuestos de objetos, del mismo modo que una maquina esta formada por partes y estas, tambin, estn formadas por otras partes. Esta estructura intrincada de los objetos permite definir objetos muy complejos. Los objetos tienen una cierta integridad que no debera -de echo no puede- ser violada. Un objeto solo puede cambiar de estado, actuar, ser manipulado o permanecer en relacin con otros objetos de maneras apropiadas para ser objeto. Las tcnicas orientadas objetos permiten que el software se construya a partir de objetos de comportamiento especifico. Como lo mencionamos antes, los objetos se pueden construir a partir de otros, que a su vez pueden estar formados por otros objetos. Esto nos recuerda una maquinaria compleja, construida por partes, subpartes, sub-subpartes, etc. El anlisis de sistemas en el mundo orientado a objetos se realiza al estudiar los objetos en un ambiente.

Mensaje:

El mensaje es el modo en que se comunican los objetos entre si. En C++, un mensaje no es ms que una llamada a una funcin de un determinado objeto. Cuando llamemos a una funcin de un objeto, muy a menudo diremos que estamos enviando un mensaje a ese objeto. En este sentido, mensaje es el trmino adecuado cuando hablamos de programacin orientada a objetos en general.

Mtodo:

Se trata de otro concepto de POO, los mensajes que lleguen a un objeto se procesarn ejecutando un determinado mtodo. En C++ un mtodo no es otra cosa que una funcin o procedimiento perteneciente a un objeto.

Clase

Una clase se puede considerar como un patrn para construir objetos. En C++, un objeto es slo un tipo de variable de una clase determinada. Es importante distinguir entre objetos y clases, la clase es simplemente una declaracin, no tiene asociado ningn objeto, de modo que no puede recibir mensajes ni procesarlos, esto nicamente lo hacen los objetos.

Subclase
Una caracterstica primaria que define un sistema orientado a objetos es la manera en que trata las relaciones estructurales y semnticas entre clases de objetos y elimina la redundancia de almacenar el mismo atributo o mtodo ms veces de lo necesario. La idea clave es la de una clasificacin jerrquica en la que la clase hija o subclase hereda los atributos y mtodos de su clase
____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

padre. Por ejemplo, supongamos una clase persona, clase persona atributos Nombre Direccin mtodos Cambi arNombre CambiarDireccin ListarDatos Podemos considerar las clases alumno y empleado en un nivel inferior. De este modo alumno y empleado heredarn los atributos y los mtodos de su clase padre persona a los que podemos aadir los atributos y mtodos propios de la clase hija. Esto es, clase alumno subclase de persona atributos Estudios Curso mtodos CambiarEstudios Cambi arCurso ListarDatos La declaracin anterior supone que la clase alumno herede los atributos y mtodos de la clase persona. Entonces un objeto de la clase alumno tendra los atributos Nombre, Direccin, Estudios y Curso y los mtodos CambiarNombre, CambiarDireccin, CambiarEstudios, CambiarCurso y ListarDatos. As mismo sucede que hemos redefnido el mtodo ListarDatos en la clase alumno para adaptarlo a las nuevas necesidades. Anlogamente podemos considerar las clases administrativo y profesor como subclases de la clase empleado. La jerarqua de clases resultante se muestra en la figura siguiente: persona

Segn lo expuesto, en una estructura jerrquica como la del ejemplo anterior, podemos establecer una relacin entre una clase y una subclase con los trminos padre e hijo, respectivamente. La clase padre se denomina tambin clase base y la clase hija clase derivada.

CARACTERISTICAS DE LA POO

____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

Las caracteristicas fundamentales de la POO son:

Abstraccin
El trmino abstraccin significa "accin de separar mentalmente". Otra definicin podra ser: "representacin de las caractersticas esenciales de algo sin incluir antecedentes o detalles irrelevantes". Esto es, por medio de la abstraccin conseguimos no detenernos en los detalles concretos de las cosas que no interesen en cada momento, sino generalizar y centrarse en los aspectos que permitan tener una visin global del tema. Por ejemplo, el estudio de un ordenador podemos realizarlo a nivel de funcionamiento de sus circuitos electrnicos, en trminos de corriente, tensin, etc., o a nivel de transferencia entre registros, centrndose as el estudio en el flujo de informacin entre las unidades que lo componen (memoria, unidad aritmtica, unidad de control, registros, etc.), sin importarnos el comportamiento de los circuitos electrnicos que componen estas unidades. Segn lo expuesto, la abstraccin consiste en la generalizacin conceptual de los atributos y propiedades de un determinado conjunto de objetos. Precisamente la clave de la programacin orientada a objetos est en abstraer los mtodos y los datos comunes a un conjunto de objetos y almacenarlos en una clase. Desde este nivel de abstraccin, la introduccin o eliminacin de un objeto en una determinada aplicacin supondr un trabajo mnimo o nulo. Una abstraccin que describa un conjunto de objetos en trminos de una estructura de datos encapsulada u oculta y las operaciones sobre esa estructura, la denominaremos tipo abstracto de datos.

Encapsulamiento
El encapsulamiento u acultamiento de informacin se refiere a la prctica de incluir dentro de un objeto todo lo que necesita, de tal forma que ningn otro objeto necesite conocer nunca su estructura interna. Esta caracterstica permite ver unobjeto como una caja negra, en la que se ha metido de alguna manera toda la informacin relacionada con dicho objeto. Esto nos permitir manipular los objetos como unidades bsicas, permaneciendo oculta su estructura interna. En C++, la abstraccin y la encapsulacin estn representadas por la clase. La clase es una abstraccin, porque en ella se definen las propiedades y los atributos genricos de un determinado conjunto de objetos con caractersticas comunes, y es una encapsulacin, porque constituye una caja negra que encierra tanto los datos de que constan los objetos como los mtodos que permiten manipularlos. Por ejemplo, segn lo expuesto, si definimos una clase complejo, las operaciones con nmeros complejos no presentarn ninguna dificultad. Esto es, si x e y son nmeros complejos, la operacin z = x /y nos dar otro complejo. Si en lugar de operar a este nivel de abstraccin y encapsulamiento descendemos a la estructura interna del nmero complejo, entonces la operacin no es tan simple. Lasoperaciones en este nivel ms inferior son las que tienen que realizar los mtodos de la clase complejo con los datos que encierra. En el ejemplo anterior, el operador "/" representa la operacin de dividir dos variables de tipo complejo. Dicho operador es el mensaje que el objeto y enva al objeto x, siendo la respuesta a tal mensaje un mtodo implementado en la clase complejo. Anteriormente se ha expuesto que mensaje equivale a prototipo de funcin. Para que esto siga siendo vlido, considere que un operador es una funcin. Ms adelante veremos que esto es as; esto es, x / y es equivalente a llamar a una funcin operator/( x, y). En realidad, si operator/ es una funcin miembro de la clase complejo, x /y equivale a la llamada x.operator/{ y ), lo que pone de manifiesto que el objeto situado a la derecha del operador enva el mensaje al objeto situado a la izquierda. Esto mismo sucede con los tipos predefinidos en el compilador C; esto es, los tipos de datos short, int, float, etc. son realmente clases.

____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

Herencia
La herencia es el mecanismo para compartir automticamente mtodos y atributos entre clases y subclases. Por ejemplo, como vimos anteriormente, si declaramos la clase profesor como una subclase de empleado, todos los mtodos y variables asociadas con la clase empleado son automticamente heredados por la subclase profesor. Si la clase empleado contiene mtodos inapropiados para la subclase profesor, stos pueden obviarse, escribiendo nuevos mtodos y almacenndolos como parte de la clase profesor, o tambin pueden redefinirse para que respondan de forma distinta a como lo hacen en la clase base. En C++, herencia equivale a derivacin de clases; la clase padre (empleado) recibe el nombre de clase base y la clase hija (profesor) se denomina clase derivada. Esta caracterstica de la POO est fuertemente ligada a la reutilizacin del cdigo. Esto es, el cdigo de cualquiera de las clases existentes puede ser utilizado sin ms que crear una clase derivada de ella. El concepto de herencia conduce a una estructura jerarquizada de clases, lo cual no significa que en POO todas las relaciones entre clases deban ajustarse a una estructura jerrquica. La herencia puede ser tambin mltiple; esto es, una clase puede derivarse de dos o ms clases base.

Polimorfismo
Esta caracterstica permite implementar mltiples formas de un mismo mtodo, dependiendo cada una de ellas de la clase sobre la que se realice la implementacin. Esto hace que se pueda acceder a una variedad de mtodos distintos (todos con el mismo nombre) utilizando exactamente el mismo medio de acceso. En C++ el polimorfismo se establece generalmente utilizando clases derivadas, funciones virtuales y punteros a objetos. Ms adelante veremos que una funcin declarada virtual en una clase base y redefinida en cada una de las clases derivadas puede ser accedida mediante un puntero o referencia a la clase base, Esto permite que un mismo mensaje pueda ser enviado a objetos de diferentes clases, de forma que el objeto que responda al mensaje ser en cada caso el referenciado por dicho puntero.

Los lenguajes orientados a objetos


Un gran nmero de lenguajes ha contribuido a la proliferacin de las tcnicas orientadas a objetos. Las versiones iniciales de Lisp en la dcada de los cincuenta y Simula en la dcada de los sesenta, sentaron las bases para el nacimiento de Smalltalk que al principio de los setenta supuso el asentamiento definitivo de la filosofa orientada a objetos. Smalltalk-80, la versin ms popular de Smalltalk, y la aparicin de extensiones orientada a objetos de dos lenguajes populares, C y Pascal (recientemente se ha incorporado Visual Basic), han acelerado rpidamente la implantacin de la POO dentro de lo que hoy se conoce ingeniera del software. Los lenguajes orientados a objetos (LOO) se dividen en dos grandes Grupos: puros e hbridos. Puros Son los que solo permiten realizar programacion orientada a objetos. Ej: smalltalk, java, Eiffel y Actor principalmente. Hibridos Son los que permiten la poo con la programacion estructurada y son aquellos que aaden las propiedades OO a las propiedades intrnsecas de tipo procedimental. Entre los lenguajes orientados a objetos hbridos se destacan Objetive-C, Object-Pascal, Turbo Pascal (versiones 5.0, 6.0 y 7.0) y C++ (versiones Turbo C++, Microsoft C/C++ 7.0, Borland C++ 3.1, Zortech C++ 3.1, Visual C++, Symantec C++ 6.0, etc.).

____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

Relacion entre clases y objetos.


Relacion entre objetos
Hemos visto que las relaciones permiten a un objeto relacionarse con los dems que forman parte de la misma organizacin. hay 3 tipos fundamentales de relaciones:

Relaciones jerrquicas, de herencia o de desgeneralizacin: especifican que una clase de objetos es subclase de otra mas general. El conjunto de todas las relaciones de este tipo construye una o mas jerarquas de clases. Pueden describirse con la frase es un.

____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

Por ejemplo: Un diccionario consecutivo es un diccionario. Relaciones de pertenencia o de agregacin: indican que un objeto es parte o componente de otro, que a su vez es un agregado que contiene en su interior uno o mas objetos de clase igual o diferente a la suya. Pueden describirse con la frase es parte de. Por ejemplo: Un par clave-valor es parte de un diccionario. Relaciones de asociacin: especifican cualquier otra relacin entre dos objetos.

Relaciones entre clases


Tipos de relaciones
Considrense por un momento las analogas y diferencias entre las siguientes clases de objetos: flores, margaritas, rosas rojas, rosas amarillas, ptalos y mariquitas. Pueden hacerse las observaciones siguientes: Una margarita es un tipo de flor. Una rosa es un tipo (distinto) de flor. Las rosas rojas y las rosas amarillas son tipos de rosas. Un ptalo es una parte de ambos tipos de flores. Las mariquitas se comen a ciertas plagas como los pulgones, que pueden infectar ciertos tipos de flores. Partiendo de este simple ejemplo se concluye que las clases, al igual que los objetos, no existen aisladamente. Antes bien, para un dominio de problema especfico, las abstracciones clave suelen estar relacionadas por vas muy diversas e interesantes, formando la estructura de clases del diseo [21]. Se establecen relaciones entre dos clases por una de dos razones. Primero, una relacin entre clases podra indicar algn tipo de comparticin. Por ejemplo, las margaritas y las rosas son tipos de flores, lo que quiere decir que ambas tienen ptalos con colores llamativos, ambas emiten una fragancia, etc. Segundo, una relacin entre clases podra indicar algn tipo de conexin semntica. As, se dice que las rosas rojas y las rosas amarillas se parecen ms que las margaritas y las rosas, y las margaritas y las rosas se relacionan ms estrechamente que los ptalos y las flores. Anlogamente, existe una conexin simbitica entre las mariquitas y las flores: las mariquitas protegen a las flores de ciertas plagas, que a su vez sirven de fuente de alimento para la mariquita. En total, existen tres tipos bsicos de relaciones entre clases [22]. La primera es la generalizacin/especializacin, que denota una relacin es un (is a). Por ejemplo, una rosa es un tipo de flor, lo que quiere decir que una rosa es una subclase especializada de una clase ms general, la de las flores. La segunda es la relacin todo/parte (whole/part), que denota una relacin parte de (par of). As, un ptalo no es un tipo de flor; es una parte de una flor. La tercera es la asociacin, que denota alguna dependencia semntica entre clases de otro modo independientes, como entre las mariquitas y las flores. Un ejemplo ms: las rosas y las velas son clases claramente independientes, pero ambas representan cosas que podran utilizarse para decorar la mesa de una cena. En los lenguajes de programacin han evolucionado varios enfoques comunes para plasmar relaciones de generalizacin/especializacin, todo/parte y asociacin. Especficamente, la mayora de los lenguajes orientados a objetos ofrecen soporte directo para alguna combinacin de las siguientes relaciones: Asociacin Herencia Agregacin Uso Instanciacin (creacin de instancias o ejemplares)

____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

Metaclase

Relaciones entre clases y objetos


Las clases y los objetos son conceptos separados pero en ntima relacin. Concretamente, todo objeto es instancia de alguna clase, y toda clase tiene cero o ms instancias. Para prcticamente todas las aplicaciones, las clases son estticas; sin embargo, su existencia, semntica y significado estn fijados antes de la ejecucin de un programa. Anlogamente, la clase de la mayora de los objetos es esttica, lo que significa que una vez que se crea un objeto, su clase est fijada. En un agudo contraste, sin embargo, los objetos se crean y destruyen tpicamente a un ritmo trepidante durante el tiempo de vida de una aplicacin. Por ejemplo, considrense las clases y objetos en la implantacin de un sistema de control de trfico areo. Algunas de las abstracciones ms importantes son los aviones, los planes de vuelo, las pistas y los espacios areos. Por su propia definicin, los significados de estas clases y objetos son relativamente estticos. Deben ser estticos, porque si no no podra construirse una aplicacin que contuviese el conocimiento de hechos tan de sentido comn como que los aviones pueden despegar, volar y aterrizar, y que dos aviones no deberan ocupar el mismo espacio al mismo tiempo. Por el contrario, las instancias de estas clases son dinmicas. Las pistas nuevas se construyen y las viejas se abandonan con evidente lentitud. Con mayor rapidez, se archivan nuevos planes de vuelo, y a otros viejos se les da carpetazo. Con gran frecuencia, nuevos aviones irrumpen en un espacio areo concreto y otros los abandonan.

1.4. El ppel de clases y objetos en el analisis y el diseo.


Durante el anlisis y las primeras etapas del diseo, el desarrollador tiene dos tareas principales: Identificar las clases y objetos que forman el vocabulario del dominio del problema. Idear las estructuras por las que conjuntos de objetos trabajan juntos para lograr los comportamientos que satisfacen los requerimientos del problema.

En conjunto, se llama a esas clases y objetos las abstracciones clave del problema, y se denomina a esas estructuras cooperativas los mecanismos de la implantacin. Durante estas fases del desarrollo, el inters principal del desarrollo debe estar en la vista externa de estas abstracciones clave y mecanismos. Esta vista representa el marco de referencia lgico del sistema y, por tanto, abarca la estruc tura de clases y la estructura de objetos del mismo. En las etapas finales del diseo y entrando ya en la implantacin, la tarea del desarrollador cambia: el centro de atencin est en la vista interna de estas abstracciones clave y mecanismos, involucrando a su representacin fsica. Pueden expresarse estas decisiones de diseo como parte de la arquitectura de mdulos y la arquitectura de procesos del sistema. La experiencia de algunos analistas nos lleva a aplicar en primer lugar el criterio orientado a objetos porque esta aproximacin es mejor a la hora de servir de ayuda para organizar la complejidad innata de los sistemas de software, al igual que ha servido de ayuda para describir la complejidad organizada de sistemas complejos tan diversos como los computadores, plantas, galaxias o grandes instituciones sociales. Los sistemas orientados a objetos son tambin ms resistentes al cambio y por lo tanto estn mejor preparados para evolucionar en el tiempo, porque su diseo esta basado en formas intermedias estables. El modelo de objetos ha influido incluso en las fases iniciales del ciclo de vida del desarrollo del software. El anlisis orientado a objetos (AOO) enfatiza la construccin de modelos del mundo real utilizando una visin del mundo orientado a objetos:
____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

El anlisis orientado a objetos es un mtodo de anlisis que examina los requisitos desde la perspectiva de las clases y objetos que se encuentran en el vocabulario del dominio del problema. Bsicamente los productos del anlisis orientado a objetos sirven como modelos de los que se puede partir para un diseo orientado a objetos; los productos del diseo orientado a objetos pueden utilizarse entonces como anteproyectos para la implementacin completa de unos sistemas utilizando mtodos de programacin orientado a objetos, de esta forma se relacionan AOO, DOO y POO. Se insiste que se ha encontrado un gran valor en la construccin de modelos que se centran en las cosas que se encuentran en el espacio del problema formando lo que se ha llamado una descomposicin orientada a objetos. El diseo orientado a objetos es el mtodo que lleva a una descomposicin orientado a objetos. Ofrece un rico conjuntos de modelos que reflejan la importancia de plasmar explcitamente las jerarquas de clases y de objetos de los sistemas que disea. El anlisis orientado a objetos (AOO) se basa en conceptos sencillos, conocidos desde la infancia y que aplicamos continuamente: objetos y atributos, l todo y las partes, clases y miembros. Puede parecer llamativo que se haya tardado tanto tiempo en aplicar estos conceptos al desarrollo de software. Posiblemente, una de las razones es el xito de los mtodos de anlisis estructurados, basados en los conceptos de flujo de informacin, que monopolizaron el anlisis de sistemas de

software durante los ltimos veinte aos.


El AOO ofrece un enfoque nuevo para el anlisis de requisitos de sistemas software. En lugar de considerar el software desde una perspectiva clsica de entrada - proceso - salida, como los mtodos estructurados clsicos se basan en modelar el sistema mediante los objetos que forman parte de el y las relaciones estticas o dinmicas entre estos objetos. Este enfoque pretende conseguir modelos que se ajusten mejor al problema real a partir del conocimiento del llamado dominio del problema.

UN PUNTO DE VISTA:
Desde el punto de vista de los anlisis antes mencionados hablamos del AOO y el AEO, podemos decir que el AOO concibe una abstraccin mayor que el AEO, que modela los sistemas desde un punto de vista ms prximo a su implementaron en un ordenador (entrada/proceso/salida). La ventaja del AOO es que se basa en la utilizacin de objetos como abstracciones del mundo real. Esto nos permite centrarnos en los aspectos significativos del domino del problema (en las caractersticas de los objetos y las relaciones que se establecen entre ellos) y este conocimiento se convierte en la parte fundamental del anlisis del sistema software que ser utilizado luego en el diseo y la implementacin. En el AOO los objetos encapsulan tanto atributos como procedimientos ( operaciones que se realizan sobre los objetos), e incorpora, adems, conceptos como los polimorfismos o la herencia que facilitan la reutilizacin de cdigo. Podemos concluir entonces que el AOO puede facilitar mucho la creacin de prototipos, y las tcnicas de desarrollo evolutivo de software. Los objetos don inherentemente reutilizables, y se puede crear un catalogo de objetos que podemos usar en sucesivas aplicaciones. De esta forma, podemos obtener rpidamente un prototipo del sistema, que pueda ser evaluado por el cliente, a partir de los objetos analizados, diseados e implementados en aplicaciones anteriores. Y lo que es ms importante, dada la facilidad de reutilizacin de estos objetos, el prototipo puede ir evolucionando hacia convertirse en el sistema final, segn vamos refinando los objetos de acuerdo a un proceso de especificacin incremental.

VENTAJAS DEL AOO: Dominio del problema

____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO 10

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

El paradigma OO es mas que una forma de programar. Es una forma de pensar acerca de un problema desde el punto de vista del mundo real en vez de desde el punto de vista del ordenador. El AOO permite analizar mejor el dominio del problema, sin pensar en trminos de implementar el sistema de un ordenador, permite, adems, pasar directamente el dominio del problema al modelo del sistema.

Comunicacin
El concepto OO es ms simple y esta menos relacionado con la informtica que el concepto de flujo de datos. Esto permite una mejor comunicacin entre el analista y el experto en el

dominio del problema. Consistencia


Los objetos encapsulan tanto atributos como operaciones. Debido a esto, el AOO reduce la distancia entre el punto de vista de los datos y el punto de vista del proceso, dejando menos lugar a inconsistencias disparidades entre ambos modelos.

Expresin de caractersticas comunes


El paradigma lo utiliza la herencia para expresar explcitamente las caractersticas comunes de una serie de objetos estas caracterstica comunes quedan escondidas en otros enfoques y llevan a duplicar entidades en el anlisis y cdigo en los programas. Sin embargo, el paradigma OO pone especial nfasis en la reutilizacin y proporciona mecanismos efectivos que permiten reutilizar aquello que es comn sin impedir por ello describir las diferencias.

Resistencia al cambio
Los cambios en los requisitos afectan notablemente a la funcionalidad de un sistema por lo que afectan mucho al software desarrollando con mtodos estructurados. Sin embargo, los cambios afectan en mucha menos medida a los objetos que componen o maneja el sistema, que son mucho ms estables. Las modificaciones necesarias para adaptar una aplicacin basada en objetos a un cambio de requisitos suelen estar mucho ms localizadas.

Reutilizacin
Aparte de la reutilizacin interna, basada en la expresin explcita de caractersticas comunes, el paradigma 00 desarrolla modelos mucho ms prximos al mundo real, con lo que aumentan las posibilidades de reutilizacin. Es probable que en futuras aplicaciones nos encontremos con objetos iguales o similares a los de la actual.

ELEMENTOS FUNDAMENTALES DEL ANALISIS ORIENTADO A OBJETOS


EL MODELO DE OBJETOS
El modelo de objetos describe la estructura de los objetos de un sistema: su identidad, sus relaciones con otros objetos, sus atributos y sus operaciones. Los cambios y las transformaciones no tienen sentido a menos que haya algo que cambiar o transformar. El modelo de objetos se representa grficamente con diagramas de objetos y diagramas de instancias, que contienen clases de objetos e instancias respectivamente. Las clases se disponen en jerarquas que compartan una estructura de datos y un comportamiento comn, y se relacionan con otras clases. Cada clase define los atributos que contiene cada uno de los objetos o instancias y las operaciones que realizan o sufren. La tecnologa orientada a objetos se apoya en slidos fundamentos de la ingeniera, cuyos
____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO 11

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

elementos reciben el nombre global de modelo de objetos. El modelo de objetos abarca principios fundamentales que los detallaremos mas adelante. Quede claro que el diseo orientado a objetos es fundamentalmente diferente a los enfoques de diseo estructurado tradicionales; requiere un modo distinto de pensar acerca de la descomposicin y produce arquitecturas software muy alejadas del dominio de la cultura del diseo estructurado. Adems, conviene mencionar que se observa que la mayora de los programadores trabajan en un lenguaje y utilizan solo un estilo de programacin. Programan bajo un paradigma apoyado por el lenguaje que usan. Frecuentemente, no se les han mostrado vas alternativas para pensar sobre un problema, y por lo tanto tiene dificultades para apreciar las ventajas de elegir un estilo, mas apropiado para el problema que tienen entre manos. No hay un estilo de programacin que sea el mejor para todo tipo de aplicaciones. Por ejemplo, la programacin orientada a reglas seria la mejor para el diseo de una base de conocimiento, y la programacin orientada a procedimientos seria la mas indicada parea el diseo de operaciones de calculo intensivo. Por experiencia de algunos estudiosos de la materia, el estilo orientado a objetos es l mas adecuado para l ms amplio conjunto de aplicaciones; realmente, este paradigma de programacin sirve con frecuencia como el marco de referencia arquitectnico en el que se emplean otros paradigmas. Cada uno de estos estilos de programacin se basa en su propio marco de referencia conceptual. Cada uno requiere una actitud mental diferente, una forma distinta de pensar en el problema. Para todas las cosas orientadas a objetos, el marco de referencia conceptual es el modelo de objetos.

FUNDAMENTOS DEL MODELO DE OBJETOS:


En realidad, el modelo de objetos ha recibido la influencia de una serie de factores, no solo de la programacin orientada a objetos. El modelo de objetos a demostrado ser un concepto u unificador de en la informtica. La razn de este gran atractivo es simplemente que una orientacin a objetos ayuda a combatir la complejidad inherente a muchos tipos de sistemas diferentes. El diseo orientado a objetos representa as un desarrollo evolutivo, no revolucionario; no rompe con los avances del pasado, sino que se basa en avances ya probados. Los mtodos de dise estructurado surgieron para guiar a los desarrolladores que intentaban construir sistemas complejos utilizando los algoritmos como bloques fundamentales para su construccin. Anlogamente los mtodos de diseo orientados a objetos han surgido para ayudar a los desarrolladores a explotar la potencia expresiva de los lenguajes de programacin basados en objetos y orientados a objetos, utilizando las clases como bloques bsicos de construccin Desgraciadamente, hoy en da la mayora de los programadores han sido educados formal e informalmente solo en los principios del diseo estructurado. En el modelo de objetos es necesario estudiar los principios fundamentales en los que se basa el anlisis orientado a objetos, es decir; Abstraccin Encapsulacin Modularidad Jerarqua Concurrencia Ninguno de estos principios es nuevo por s mismo. Lo importante del modelo de objetos es el echo de conjugar todos estos elementos en forma sinrgica. Al decir fundamentales, quiere decir que un modelo que carezca de cualquiera de estos elementos no estar orientado a objetos.
____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO 12

FUNDAMENTOS UNIDAD I ____________________________________________________________________________________________________

Otros elementos que podran llamarse secundarios, que quiere decir, que cada uno de ellos es una parte til del modelo de objetos, pero no esenciales son: Tipos Persistencia A partir de los elementos antes mencionados, trataremos de mostrar, mediante una definicin en primer lugar de cada uno de ellos, cual es la asociacin con el sistema solar y el sistema celular, esto quiere decir que asociaremos estos elementos bases de la llamada teora de los objetos con el macrocosmo y el microcosmo, dictando sus caractersticas fundamentales para el entendimiento claro de este. A la vez, tambin definiremos las desigualdades u oposiciones de estos elementos con los sistemas antes mencionados. En otras palabras veremos como pasamos de un anlisis estructurado a un anlisis orientado a objetos, y viceversa. Macrocosmo v/s Microcosmo, esto incorporado al sistema de la teora de los objetos.

____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO 13