Está en la página 1de 35

Fundamentos de Programacin Ing.

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

Realizados por: Ing. Jorge Eloy Toledo Coronel

Fundamentos de Programacin Ing. En Sistemas Computacionales

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>>.

Realizados por: Ing. Jorge Eloy Toledo Coronel

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

Interaccin entre objetos

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

Existen dos tipos de diagramas de interaccin: el Ddiagrama de Ccolaboracin y el Diagrama de Ssecuencia

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

Realizados por: Ing. Jorge Eloy Toledo Coronel

Fundamentos de Programacin Ing. En Sistemas Computacionales

Representacin Grafica de una clase

Motocicleta color cilindrada velocidad mxima arrancar() acelerar() frenar()


Otros ejemplos:

lista primero() ultimo() aadir() quitar() cardinalidad()

pila apilar() desapilar() cardinalidad()

1.2.- Abstraccin de Datos: Introduccin


Los tipos definidos por el usuario o tipos abstractos de datos ( TAD) empaquetan elementos dato con las operaciones que se realizan 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

Realizados por: Ing. Jorge Eloy Toledo Coronel

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

Realizados por: Ing. Jorge Eloy Toledo Coronel

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

Realizados por: Ing. Jorge Eloy Toledo Coronel

Fundamentos de Programacin Ing. En Sistemas Computacionales

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

Realizados por: Ing. Jorge Eloy Toledo Coronel

Fundamentos de Programacin Ing. En Sistemas Computacionales

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

1.3.- La POO y la complejidad del Software


A grandes rasgos significa que el software se organiza como una coleccin de objetos discretos que contienen tanto estructura de datos como un comportamiento. se mencionan cuatro caractersticas precisas que requiere un enfoque Orientado a Objetos: Identidad Clasificacin Polimorfismo Herencia IDENTIDAD: con esto queremos dar a entender que los datos estn cuantificados en entidades llamadas comnmente objetos. CLASIFICACION: significa que los objetos con la misma estructura de datos (atributos) y comportamiento (operaciones) se unen para formar una clase. POLIFORMISMO: nos indica que una misma operacin puede comportarse de modos distintos en distintas clases. HERENCIA: esto es cuando se comparte atributos y operaciones entre dos o mas clases tomando como base una relacin jerrquica. En la Programacin Orientada a Objetos mas conocida como POO se le denomina programa a una coleccin de una sola entidad bsica, el objeto, el cual combina los datos con los procedimientos que actan sobre ellos. Durante la ejecucin, los objetos reciben y envan mensajes a otros objetos para ejecutar las acciones requeridas. Por ultimo y para finalizar con este proceso; la organizacin jerrquica de los objetos en clases permite que datos y mtodos de una clase sean heredados por sus descendientes.

Realizados por: Ing. Jorge Eloy Toledo Coronel

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

El software cuenta con :


Dominio del problema: donde se junta la informacin y se crea un anlisis del software.

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.

CONCLUSION DEL EQUIPO


Con este tema queda entendido que un sistema complejo es aquel que a partir de una forma simple ha evolucionado de forma que se relaciona con otros sistemas simples y estos actan para realizar una funcin general como si fuera de una sola unidad, hay que recordar que un sistema esta dividido en diferentes unidades.

1.4.-Conceptos del Ciclo de vida del Software.


Todo proyecto de ingeniera tiene unos fines ligados a la obtencin de un producto, proceso o servicio que es necesario generar a travs de diversas actividades. Algunas de estas actividades pueden agruparse en fases porque globalmente contribuyen a obtener un producto intermedio, necesario para continuar hacia el producto final y facilitar la gestin del proyecto. Al conjunto de las fases empleadas se le denomina ciclo de vida. Sin embargo, la forma de agrupar las actividades, los objetivos de cada fase, los tipos de productos intermedios que se generan, etc. pueden ser muy diferentes dependiendo del tipo de producto o proceso a generar y de las tecnologas empleadas. La complejidad de las relaciones entre las distintas actividades crece exponencialmente con el tamao, con lo que rpidamente se hara inabordable si no fuera por la vieja tctica de divide y vencers. De esta forma la divisin de los proyectos en fases sucesivas es un primer paso para la reduccin de su complejidad, tratndose de escoger las partes de manera que sus relaciones entre s sean lo ms simples posibles. La definicin de un ciclo de vida facilita el control sobre los tiempos en que es necesario aplicar recursos de todo tipo ( personal, equipos, suministros, etc.) al proyecto. Si el proyecto incluye subcontratacin de partes a otras organizaciones, el control del trabajo subcontratado se facilita en la medida en que esas partes encajen bien en la estructura de las fases. El control de calidad tambin se ve facilitado si la separacin entre fases se hace corresponder con puntos en los que sta deba verificarse (mediante comprobaciones sobre los productos parciales obtenidos).
Realizados por: Ing. Jorge Eloy Toledo Coronel

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

ELEMENTOS DEL CICLO DE VIDA


Un ciclo de vida para un proyecto se compone de fases sucesivas compuestas por tareas planificables. Segn el modelo de ciclo de vida, la sucesin de fases puede ampliarse con bucles de realimentacin, de manera que lo que conceptualmente se considera una misma fase se pueda ejecutar ms de una vez a lo largo de un proyecto, recibiendo en cada pasada de ejecucin aportaciones de los resultados intermedios que se van produciendo (realimentacin).

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.

Realizados por: Ing. Jorge Eloy Toledo Coronel

10

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

Esquema general de operacin de una 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.

TIPOS DE MODELO DE CICLO DE VIDA


Las principales diferencias entre distintos modelos de ciclo de vida estn en: o El alcance del ciclo dependiendo de hasta dnde llegue el proyecto correspondiente. Un proyecto puede comprender un simple estudio de viabilidad del desarrollo de un producto, o su desarrollo completo o, llevando la cosa al extremo, toda la historia del producto con su desarrollo, fabricacin, y modificaciones posteriores hasta su retirada del mercado. Las caractersticas (contenidos) de las fases en que dividen el ciclo. Esto puede depender del propio tema al que se refiere el proyecto (no son lo mismo las tareas que deben realizarse para proyectar un avin que un puente), o de la organizacin (inters de reflejar en la divisin en fases aspectos de la divisin interna o externa del trabajo). La estructura de la sucesin de las fases que puede ser lineal, con prototipado, o en espiral. Vemoslo con ms detalle:

Ciclo de vida lineal


Es el ms utilizado, siempre que es posible, precisamente por ser el ms sencillo. Consiste en descomponer la actividad global del proyecto en fases que se suceden de manera lineal, es decir, cada una se realiza una sola vez, cada una se realiza tras la anterior y antes que la siguiente . Con un ciclo lineal es fcil dividir las tareas entre equipos sucesivos, y prever los tiempos (sumando los de cada fase).

Realizados por: Ing. Jorge Eloy Toledo Coronel

11

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

Ejemplo de ciclo lineal para un proyecto de construccin

Ciclo de vida con prototipado


A menudo ocurre en desarrollos de productos con innovaciones importantes, o cuando se prev la utilizacin de tecnologas nuevas o poco probadas, que las incertidumbres sobre los resultados realmente alcanzables, o las ignorancias sobre el comportamiento de las tecnologas, impiden iniciar un proyecto lineal con especificaciones cerradas. Si no se conoce exactamente cmo desarrollar un determinado producto o cules son las especificaciones de forma precisa, suele recurrirse a definir especificaciones iniciales para hacer un prototipo, o sea, un producto parcial (no hace falta que contenga funciones que se consideren triviales o suficientemente probadas) y provisional (no se v a a fabricar realmente para clientes, por lo que tiene menos restricciones de coste y/o prestaciones). Este tipo de procedimiento es muy utilizado en desarrollo avanzado.

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.

Ciclo de vida en espiral

Realizados por: Ing. Jorge Eloy Toledo Coronel

12

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

OBJETIVOS DE CADA FASE


Dentro de cada fase general de un modelo de ciclo de vida, se pueden establecer una serie de objetivos y tareas que lo caracterizan. Fase de definicin (qu hacer?) o Estudio de viabilidad. o Conocer los requisitos que debe satisfacer el sistema (funciones y limitaciones de contexto). o Asegurar que los requisitos son alcanzables. o Formalizar el acuerdo con los usuarios. o Realizar una planificacin detallada. Fase de diseo (cmo hacerlo? Soluciones en coste, tiempo y calidad) o Identificar soluciones tecnolgicas para cada una de las funciones del sistema. o Asignar recursos materiales para cada una de las funciones. o Proponer (identificar y seleccionar) subcontratas. o Establecer mtodos de validacin del diseo.
Realizados por: Ing. Jorge Eloy Toledo Coronel

13

Fundamentos de Programacin Ing. En Sistemas Computacionales

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):

LOS PROYECTOS DE I+D


En el caso de la investigacin bsica el resultado esperado son conocimientos cientficos. No existe ninguna fase de construccin y s fases que recojan las tareas de experimentacin. En la investigacin aplicada el resultado esperado suele ser alguna tecnologa aplicable para procesos o para productos. Dependiendo del grado de cercana a la aplicacin que llegue a alcanzarse el modelo puede ser bsicamente como el anterior o incluir una fase de aplicacin piloto. En el desarrollo de productos o procesos nuevos o significativamente modificados s aparece ya una fase de construccin, aunque normalmente se tratar de la realizacin de un prototipo. Normalmente el cliente no ser el usuario final, sino los departamentos de ingeniera de produccin de la propia empresa o de otra que contrata el desarrollo. La I+D es costosa por depender de personal muy cualificado, por realizarse de modo generalmente artesanal y por requerir bucles de realimentacin que multiplican, para hacer frente a incidencias, la duracin del proyecto.

CICLO DE VIDA EN INTERNET


Con Internet de por medio, todo se transforma en algo ms rpido. Internet ha conseguido en 5 o 6 aos lo que televisin o telfono han tardado dcadas. Tema: El ciclo de la vida en Internet Autor: Pilar Navas El conocido ciclo de vida, basado en considerar que cualquier producto tiene una duracin limitada y que pasa por una serie de fases (nacimiento, crecimiento y maduracin) se ha acortado notablemente.

Realizados por: Ing. Jorge Eloy Toledo Coronel

14

Fundamentos de Programacin Ing. En Sistemas Computacionales

1.4.1.- Especificaciones de requerimientos.


Impacto del proceso: Especificacin de Requerimientos de Software :define de forma precisa el producto de software que se va a construir. Las decisiones hechas estn basados en informacin de los documentos de la propuesta del proyecto y requerimientos del usuario. El conjunto de requerimientos deben ser satisfechos en el diseo del sistema.

Requerimiento: Caracterstica o Restriccin de un Sistema. Ingeniera de Requerimientos: Proceso sistemtico utilizado para derivar una definicin del sistema de software a ser desarrollado.

Realizados por: Ing. Jorge Eloy Toledo Coronel

15

Fundamentos de Programacin Ing. En Sistemas Computacionales

Solicitud

Definicin

Especificacin

Anlisis

Realizados por: Ing. Jorge Eloy Toledo Coronel

16

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

Errores de una mala Especificacin de Requerimientos

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.

Realizados por: Ing. Jorge Eloy Toledo Coronel

17

Fundamentos de Programacin Ing. En Sistemas Computacionales

Frecuentemente el cliente no sabe que quiere; se le inventan necesidades falsas. Tareas mal identificadas. Establecimiento de requerimientos como mero trmite.

Realizados por: Ing. Jorge Eloy Toledo Coronel

18

Fundamentos de Programacin Ing. En Sistemas Computacionales

1.4.2.- Anlisis Orientada a Objetos.

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?

1.4.3.- Diseo Orientado a Objetos


Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos. Tambin se necesitar realizar un anlisis y diseo orientado a objetos. El modelamiento visual es la clave para realizar el anlisis OO. Desde los inicios del desarrollo de software OO han existido diferentes metodologas para hacer esto del modelamiento, pero sin lugar a duda, el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologas. Segn los mismos diseadores del lenguaje UML, ste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacin a objetos. Y adems, este lenguaje debe ser entendible para los humanos y mquinas. Actualmente en la industria del desarrollo de software tenemos al UML como un estndar para el modelamiento de sistemas OO. Fue la empresa Racional que cre estas definiciones y especificaciones del estndar UML, y lo abri al mercado. La misma empresa cre uno de los programas ms conocidos hoy en da para este fin; el Racional Rose, pero tambin existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente. El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos.

Realizados por: Ing. Jorge Eloy Toledo Coronel

19

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

1.4.4.- POO, conceptos y Caractersticas

Programacin orientada a objetos


La Programacin Orientada a Objetos (POO u OOP segn siglas en ingls) es un paradigma de programacin que define los programas en trminos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, procedimientos o mtodos ) e identidad (propiedad del objeto que lo diferencia del resto). La programacin orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y mdulos ms fciles de escribir, mantener y reutilizar. De esta forma, un objeto contiene toda la informacin, (los denominados atributos) que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases (e incluso entre objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos). A su vez, dispone de mecanismos de interaccin (los llamados mtodos) que favorecen la comunicacin entre objetos (de una misma clase o de distintas), y en consecuencia, el cambio de estado en los propios objetos. Esta caracterstica lleva a tratarlos como unidades indivisibles, en las que no se separan (ni deben separarse) informacin (datos) y procesamiento (mtodos). Dada esta propiedad de conjunto de una clase de objetos, que al contar con una serie de atributos definitorios, requiere de unos mtodos para poder tratarlos (lo que hace que ambos conceptos estn ntimamente entrelazados), el programador debe pensar indistintamente en ambos trminos, ya que no debe nunca separar o dar mayor importancia a los atributos en favor de los mtodos, ni viceversa. Hacerlo puede llevar al programador a seguir el hbito errneo de crear clases contenedoras de informacin por un lado y clases con mtodos que manejen esa informacin por otro (llegando a una programacin estructurada camuflada en un lenguaje de programacin orientado a objetos). Esto difiere de los lenguajes imperativos tradicionales, en los que los datos y los procedimientos estn separados y sin relacin, ya que lo nico que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programacin estructurada anima al programador a pensar sobre todo en trminos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. Los programadores de lenguajes imperativos escriben funciones y despus les pasan datos. Los programadores que emplean lenguajes orientados a objetos definen objetos con datos y mtodos y despus envan mensajes a los objetos diciendo qu realicen esos mtodos en s mismos. Algunas personas tambin distinguen la POO sin clases, la cual es llamada a veces programacin basada en objetos.

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

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

Diferencias con la programacin imperativa


Aunque la programacin imperativa (a veces llamada procedural o procedimental) condujo a mejoras de la tcnica de programacin secuencial, tales como la programacin estructurada y "refinamientos sucesivos", los mtodos modernos de diseo de software orientado a objetos incluyen mejoras entre las que estn el uso de los patrones de diseo, diseo por contrato, y lenguajes de modelado (ej: UML). Las principales diferencias entre la programacin imperativa y la orientada a objetos son: La programacin orientada a objetos es ms moderna, es una evolucin de la programacin imperativa que plasma en el diseo de una familia de lenguajes conceptos que existan previamente con algunos nuevos. La programacin orientada a objetos se basa en lenguajes que soportan sintctica y semnticamente la unin entre los tipos abstractos de datos y sus operaciones (a esta unin se la suele llamar clase). La programacin orientada a objetos incorpora en su entorno de ejecucin mecanismos tales como el polimorfismo y el envo de mensajes entre objetos.

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.

Realizados por: Ing. Jorge Eloy Toledo Coronel

21

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

La Programacin Orientada a Objetos (POO) como solucin


La programacin orientada a objetos es una nueva forma de programar que trata de encontrar solucin a estos problemas. Introduce nuevos conceptos, que superan y amplan conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

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.

Realizados por: Ing. Jorge Eloy Toledo Coronel

22

Fundamentos de Programacin Ing. En Sistemas Computacionales

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).

1.5.- Elementos primordiales en el modelo de Objetos .


La programacin Orientada a Objetos trata de cumplir las necesidades de los usuarios finales, ests tareas se realizan mediante la modelizacin del mundo real, el sopote fundamental es el modelo objeto. Los elementos ms importantes de este modelo son: *Abstraccin *Encapsulamiento *Modularidad *Jerarqua y Herencia *Polimorfismo
Realizados por: Ing. Jorge Eloy Toledo Coronel

23

Fundamentos de Programacin Ing. En Sistemas Computacionales

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

Fundamentos de Programacin Ing. En Sistemas Computacionales

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

Realizados por: Ing. Jorge Eloy Toledo Coronel

25

Fundamentos de Programacin Ing. En Sistemas Computacionales

} Void mantenimiento() { Accin Accin } Void imprimir() { Accin Accin }

1.5.4.- Jerarqua y Herencia. Jerarqua


La Jerarqua es una propiedad que permite la ordenacin de las abstracciones. Las dos jerarquas ms importantes de un sistema complejo son: estructura de clases (jerarqua es-un (is-a): generalizacin/especializacin) y estructura de objetos (jerarqua parte-de (part-of): agregacin). Las jerarquas de generalizacin/especializacin se conocen como herencia. Bsicamente, la herencia define una relacin entre clases, en donde una clase comparte la estructura o comportamiento definido en una o ms clases (herencia simple y herencia mltiple, respectivamente). La agregacin es el concepto que permite el agrupamiento fsico de estructuras relacionadas lgicamente. As, un camin se compone de ruedas, motor, sistema de transmisin y chasis; en consecuencia, camin es una agregacin, y ruedas, motor, transmisin y chasis son agregados de camin

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:

Realizados por: Ing. Jorge Eloy Toledo Coronel

26

Fundamentos de Programacin Ing. En Sistemas Computacionales

DISEAR UN SISTEMA ORIENTADO A OBJETOS CON HERENCIA PARA EL HOSPITAL


DEL ISSSTE TOMANDO EN CONSIDERACION TODOS LOS DATOS NECESARIOS DEL DERECHO-HABIENTE TOMANDO EN COSIDERACION LAS AREAS QUE OFRECE ESTE INSTITUTO DE SERVICIO MEDICO. MI CLASE BASE ES: HOSPITAL MIS CLASES DERIVADAS CONSUL_GENERAL, ESPECIALES Y HOSPITALIZACION Consulta General Especialidades Hospitalizacin

Nombre Direccion Sexo trabajador edad dependencia edociv

Nombre Direccion Sexo trabajador edad dependencia edociv1 dep-tra especialidad

Nombre Direccion Sexo trabajador edad dependencia edociv2 area tratamiento

Leer() Imprimir()

Leer() Imprimir()

Leer() Imprimir()

ARBOL DE HERENCIA

HOSPITAL nom,dir,sexo,edad,dep LEER(),VISUALIZAR()

CONSULTA GENERAL edociv LEER() VISUALIZAR()

ESPECIALIDADES edociv1, dep_tra,especialidad LEER() VISUALIZAR()

HOSPITALIZACION edociv2,area,tratamiento, LEER() VISUALIZAR()

Realizados por: Ing. Jorge Eloy Toledo Coronel

27

Fundamentos de Programacin Ing. En Sistemas Computacionales

#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];

Realizados por: Ing. Jorge Eloy Toledo Coronel

28

Fundamentos de Programacin Ing. En Sistemas Computacionales

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(); } }

Realizados por: Ing. Jorge Eloy Toledo Coronel

29

Fundamentos de Programacin Ing. En Sistemas Computacionales

//*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.

Realizados por: Ing. Jorge Eloy Toledo Coronel

30

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

Realizados por: Ing. Jorge Eloy Toledo Coronel

31

Fundamentos de Programacin Ing. En Sistemas Computacionales

Animal dormir()

Dormir() { }

Len dormir()

Oso dormir()

Tigre dormir()

Dormir() { sobre el vientre }

Dormir() { sobrela espalda }

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(); }

Realizados por: Ing. Jorge Eloy Toledo Coronel

32

Fundamentos de Programacin Ing. En Sistemas Computacionales

1.6.- Historia de los paradigmas en el Desarrollo del Software


El desarrollo de los lenguajes de programacin, sorprendentemente, sigue de cercas el desarrollo de los procesos fsicos y electrnicos usados en las computadoras de hoy en dia. Acreditan a Charles Babbage a menudo con disear las primeras mquinas parecidas a computadoras, que tenan varios programas escritos para ellas (en el equivalente del lenguaje ensamblador) por Ada Lovelace. Alan Turing utiliz la construccin terica de una mquina de Turing que se comportaba en principio de todas las maneras relevantes como las computadoras modernas, segn el programa de nivel bajo con el que se encontraba. En 1940 las primeras computadoras reconocidas como modernas, elctricamente accionadas fueron creadas, requiriendo a los programadores funcionar las mquinas a mano. Algunas necesidades militares del calculo eran una fuerza impulsora en el desarrollo temprano de las computadoras, tal como cifrado (encryption), desciframiento (decryption), calculo de la trayectoria y desarrollo de bombas atmicas. En aquella poca, las computadoras eran extremadamente grandes, lentas y costosas: los avances en tecnologa electrnica en los aos de la posguerra condujeron a la construccin de computadoras electrnicas ms prcticas. En aquella poca solamente Konrad Zuse imaginaba el uso de un lenguaje de programacin (desarrollado eventualmente como Plankalkl) como los de hoy para solucionar problemas. Los descubrimientos subsecuentes en la tecnologa electrnica (transistores, circuitos integrados, y chips) condujeron el desarrollo de computadoras cada vez ms confiables y ms usables. Esto fue paralelo por el desarrollo de una variedad de lenguajes de programacin estandarizado para funcionar en ellos. La disponibilidad y la facilidad de empleo mejoradas de computadoras condujeron a un crculo mucho ms ancho de la gente que puede tratar de las computadoras. El desarrollo explosivo subsecuente ha dado lugar al Internet, ordenadores personales, y al uso creciente de la programacin en computadoras personales, con idiomas ms accesibles tales como python, bsico vi sual, etc.

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

Fundamentos de Programacin Ing. En Sistemas Computacionales

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.

Algunos lenguajes orientados a objetos


* SIMULA * OHaskell * Ruby * C++ * Objective -C *D * Java * Action Script * Python * Smalltalk * Perl * Ocaml * CLOS * Eiffel

Realizados por: Ing. Jorge Eloy Toledo Coronel

34

Fundamentos de Programacin Ing. En Sistemas Computacionales

1.7.- Beneficios del modelo de objetos y de la poo sobre otros Paradigmas


Da a da los costos del Hardware decrecen. As surgen nuevas reas de aplicacin cotidianamente: procesamiento de imgenes y sonido, bases de datos multimediales, automatizacin de oficinas, ambientes de ingeniera de software, etc. An en las aplicaciones tradicionales encontramos que definir interfases hombre-mquina a-la-Windows suele ser bastante conveniente. Lamentablemente, los costos de produccin de software siguen aumentando; el mantenimiento y la modificacin de sistemas complejos suele ser una tarea trabajosa; cada aplicacin, (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo, etc. Todos estos problemas an no han sido solucionados en forma completa. Pero como los objetos son portables (tericamente) mientras que la herencia permite la reusabilidad del cdigo orientado a objetos, es ms sencillo modificar cdigo existente porque los objetos no interaccionan excepto a travs de mensajes; en consecuencia un cambio en la codificacin de un objeto no afectar la operacin con otro objeto siempre que los mtodos respectivos permanezcan intactos. La introduccin de tecnologa de objetos como una herramienta conceptual para analizar, disear e implementar aplicaciones permite obtener aplicaciones ms modificables, fcilmente extendibles y a partir de componentes reusables. Esta reusabilidad del cdigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en trminos de objetos ms que en trminos de algoritmos de software.

Realizados por: Ing. Jorge Eloy Toledo Coronel

35

También podría gustarte