Sunteți pe pagina 1din 58

Apuntes de Fundamentos de Programacin de Sistemas

Fundamentos De Programacin
Unidad 1 Conceptos bsicos del modelo orientado a objetos
1.1 Paradigmas de Programacin 1.2 Beneficios del Modelo de Objetos y de la Poo sobre otros Paradigmas 1.3 Reconocimiento de Objetos y Clases en el mundo real y la interaccin entre ellos 1.4 La Abstraccin y el encapsulamiento como un proceso natural 1.5 La POO y la Complejidad del Software 1.6 Conceptos del Ciclo de Vida del Software 1.6.1 Especificaciones de Requerimientos 1.6.2 Anlisis Orientado a Objetos 1.6.3 Diseo Orientado a Objetos 1.6.4 Programacin Orientada Objetos, Conceptos y Caractersticas 1.7 Elementos Primordiales en el Modelo de Objetos 1.7.1 Encapsulamiento de Objetos 1.7.2 Modularidad de Objetos 1.7.3 Herencia y Polimorfismo

Unidad 2 Tcnicas Bsicas de Modelado de Objetos


2.1 Definicin de Clases, Atributos, Mtodos y Objetos 2.2 El Modelo como resultado de la Abstraccin 2.3 El UML como una Herramienta de Modelado de Objetos 2.4 Planteamiento del problema 2.4.1 Analizar el enunciado del Problema 2.4.2 Identificar funciones del Sistema 2.5 Anlisis 2.5.1 Descubrir Objetos en el Dominio del Problema 2.5.2 Identificar Atributos de los Objetos 2.5.3 Identificar Mtodos en los Objetos

Unidad 3 Tcnicas de diseo detallado


3.1 Diseo Algortmico 3.1.1 Elementos y Reglas para la Representacin de Algoritmos 3.2 Diseo Algortmico de Funciones

Unidad 4 Introduccin a Programacin


4.1 Clasificacin Del Software 4.1.1 Software Del Sistema 4.1.2 Software De Aplicacin 4.2 Conceptos de la Programacin 4.2.1 Definicin de Programa 4.2.2 Definicin de Programacin 4.2.3 Definicin Lenguajes de Programacin 4.3 Datos Definicin 4.3.1 Tipos de Datos 4.3.2 Identificadores 4.3.3 Sistema de Numeracin Binaria y Hexadecimal 4.4 Operadores Operandos y Expresiones 4.5 Prioridad Operadores en evaluacin de expresiones 4.6 Estructura Bsica de un Programa

Apuntes de Fundamentos de Programacin de Sistemas


4.7 Proceso Creacin de un Ejecutable

Unidad 5 Implementacin de la Clase


5.1 Modificadores de Acceso 5.2 Encapsulamiento de la Clase 5.3 El Mtodo como Elemento de la Comunicacin 5.3.1 Concepto de Parmetro 5.3.2 El Constructor 5.3.3 El Destructor

Unidad 6 Estructuras Secuenciales y Selectivas


6.1 Entrada y Salida de Datos 6.2 Estructuras Secuencial 6.3 Estructuras Selectivas 6.3.1 Selectiva Simple (si) 6.3.2 Selectiva Doble( si / de otro modo) 6.3.3 Selectiva Anidada 6.3.4 Selectiva Mltiple(switch) 6.3.5 Selectiva Intenta( try/catch)

Unidad 7 Estructuras de Repeticin


7.1 Repetir Mientras (Selectiva simple si) 7.2 Repetir Hasta 7.3 Repetir Desde

Apuntes de Fundamentos de Programacin de Sistemas FUENTES DE INFORMACIN


CAMELIA MUOZ CARO/ALFONSO NIO RAMOS/AURORA VIZCANO BARCEL INTRODUCCIN A LA PROGRAMACIN CON ORIENTACIN A OBJETOS PRENTICE HALL OSVALDO CAIR METODOLOGA DE LA PROGRAMACIN Algoritmos, diagramas de flujo y programas ALFAOMEGA GREG PERRY APRENDIENDO PRINCIPIOS DE PROGRAMACIN EN 24 HORAS ED. PRENTICE may ANTHONY SINTES APRENDIENDO PROGRAMACIN ORIENTADA A OBJETOS EN 21 LECCIONES AVANZADAS ED. PREARSON EDUCACIN, MXICO 2002 TIMOTHY BUDD INTRODUCCIN A LA PROGRAMACIN ORIENTADA A OBJETOS ED. ADDISON-WESLEY IBEROAMERICANA, USA 1994 GRADY BOOCH/ADDISON-WESLEY/DIAZ DE SANTOS ANLISIS Y DISEO ORIENTADO A OBJETOS CON APLICACIONES SEGUNDA EDICIN, MXICO 1994 ED. ADDISON-WESLEY JAMES MARTN/JAMES J. ODELL ANLISIS Y DISEO ORIENTADO A OBJETOS ED. PRENTICE HISPANO-AMERICANA ANDREW C. STAUGGARD JR. TECNICAS ESTRUCTURADAS Y ORIENTADA A OBJETOS ED. PRENTICE HISPANO-AMERICANA MICHAEL BLAHA/WILLIAM PREMERLANI/FRED HED/WILLIAM LORENSEN PROGRAMACIN ORIENTADA A OBJETOS. CONCEPTOS, MODELADO, DISEO Y CODIFICACN EN C++ ED PRENTICE may, MADRID ESPAA 1996

Apuntes de Fundamentos de Programacin de Sistemas

Unidad 1 Conceptos Bsicos del Modelo Orientado a Objetos


1.1 Paradigmas de Programacin
El propsito de un programador profesional es construir productos que satisfagan al mximo las necesidades de sus clientes. Sin embargo, construir un programa no trivial es una tarea compleja y a veces atemorizante. Escribir instrucciones con una cierta sintaxis slo es una etapa de este proceso. Otras etapas importantes son el anlisis del problema que se desea resolver, el diseo del programa, la documentacin, las pruebas y el mantenimiento. Un buen balance entre todas estas partes hacen de un programa un producto confiable. Actualmente existen muchas tcnicas para construir esos productos, cada una con sus ventajas y desventajas. En este documento se dar un vistazo general de la tecnologa orientada a objetos para la construccin de software de alta calidad. Los aspectos principales de un software de calidad son: (1) Robustez (2) Confiabilidad (3) Eficiencia (4) Claridad (5) Mantenimiento a bajo costo. La mayora de los programadores alguna vez han escuchado hablar o han usado alguna de las siguientes formas de programacin: Programacin Lineal. Programacin Estructurada. Programacin Modular. Programacin Orientada a Objetos. En las siguientes secciones se discute brevemente en que consiste cada una de estas tcnicas resaltando las ventajas y desventajas respecto a las otras. 1.1.1 Programacin Lineal Usualmente, cualquier programador empieza escribiendo programas pequeos y simples, los cuales consisten de una parte principal. En este caso el ''programa principal'' consiste de una secuencia de comandos o declaraciones que modifican datos globales a travs de todo el programa. Lo anterior se ilustra en la siguiente figura:

Figura 1.1: Paradigma de programacin lineal.

Apuntes de Fundamentos de Programacin de Sistemas


Esta es la manera tradicional en que un principiante se inicia como programador y ni tiene mayor dificultad. Por otro lado, es bien conocido que esta forma de programacin tiene tremendas desventajas una vez que el programa es lo suficientemente grande. Por ejemplo, si la misma secuencia de declaraciones se necesita en lugares diferentes del programa, entonces dicha secuencia debe ser copiada en cada lugar donde haga falta. Lo anterior gener la idea de extraer secuencias y ponerlas en algn ''lugar'' desde donde sea posible ejecutarlas para luego regresar al programa principal. El ''lugar'' se conoce como subrutina, procedimiento o funcin, dependiendo del lenguaje, y es la base de la programacin estructurada.

1.1.2 Programacin Estructurada


En la programacin estructurada se pueden conjuntar secuencias de declaraciones e instrucciones en un mismo lugar, las que despus pueden ser usadas por el programa principal desde cualquier punto. La secuencia se conoce como subrutina, procedimiento o funcin dependiendo del lenguaje que se trate. Se dice que se hace una llamada para invocar al procedimiento. Despus de que la secuencia es procesada, el control de flujo regresa al programa principal justo despus de donde se hizo la llamada, vase la figura 1.2. El paradigma original de este tipo de programacin es: Buscar los procedimientos que se desean; usar los mejores algoritmos existentes.

Figura 1.2: Paradigma programacin estructurada.

de

La inclusin de procedimientos hace a los programas estructurados y con menos posibilidad de errores. Por ejemplo, si un procedimiento es correcto, cada vez que sea ejecutado producir, en principio, resultados correctos. Por el contrario, en caso de que el procedimiento contenga errores, se puede agilizar la bsqueda de stos ltimos y repararlos rpidamente. Un programa puede verse como una secuencia de llamadas a procedimientos. El programa principal es el responsable de pasar los datos individuales en cada llamada, los datos son procesados y una vez que el programa finaliza, se presentan y/o se obtienen los resultados finales. De esta manera, el control

Apuntes de Fundamentos de Programacin de Sistemas


de flujo de datos puede ser ilustrado como una grfica jerrquica como se muestra en la siguiente figura.

Figura 1.3: Control de flujo en la programacin estructurada. En resumen, la programacin estructurada, consiste en dividir un programa en pequeas piezas llamadas procedimientos y cada procedimiento es ejecutado o llamado por el programa principal desde diferentes lugares de ste para resolver un problema. La programacin estructurada resuelve algunos problemas que se tienen con la programacin lineal. 1.1.3 Programacin Orientada a Objetos En la POO, la estructura es organizada por los datos. Primero se seleccionan las representaciones de los datos que mejor cumplen con los requerimientos, y luego se decide que hacer con ellas, que es justo lo contrario a la programacin modular. La abstraccin de datos es fundamental para un buen diseo. La POO resuelve la mayora de los problemas mencionados en las secciones anteriores. En contraste con otras tcnicas, ahora se va a interactuar con objetos cada uno manteniendo su propio estado, ver figura 1.5.

Figura 1.5: Paradigma de programacin orientada a objetos.

Apuntes de Fundamentos de Programacin de Sistemas


Podra decirse que cada objeto implementa su propio mdulo permitiendo coexistir a varios objetos del mismo tipo. Cada objeto es responsable de su inicializacin y destruccin. Pero esto no es todo. En la POO existen ms conceptos y tcnicas que ayudan al programador a ordenar sus ideas y, consecuentemente, a construir software ms manejable con un tiempo de vida mayor que usando otras tcnicas. El paradigma de la programacin orientada a objetos es: Buscar las clases que se desean; Proveer de un conjunto completo de operaciones para cada clase; especializar usando herencia. En general, si un algoritmo puede ser expresado independientemente de los tipos de datos y si ste puede hacerse sin contorsiones lgicas, el algoritmo debera ser codificado de esta manera para que sea lo ms general posible. Esta es la idea detrs de la programacin genrica. Solamente algunos lenguajes permiten hacer programacin genrica, C++ es uno de ellos (a travs del uso de templates). La biblioteca estndar (STL) de C++ est construida bajo esta metodologa. 1.2 Relacin entre la Programacin Orientada a Objetos y la Programacin Estructurada La POO 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 sta una de la diferencias radicales respecto a la programacin estructurada. Una de las bases de esta escuela de programacin parte del diseo arriba abajo (programacin estructurada). 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 POO 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 POO sobre la programacin convencional. Se ha llegado a decir que el cambio introducido por la POO es similar al producido por la aparicin del ensamblador sobre el cdigo de mquina. La POO proporciona las siguientes ventajas sobre otros lenguajes de programacin: Uniformidad. Ya que la representacin de los objetos lleva implcito 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.

Apuntes de Fundamentos de Programacin de Sistemas


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 unidad es que la programacin orientada a objetos no sustituye a ninguna metodologa ni lenguaje de programacin anterior. Todos los programas que se realizan utilizando una metodologa de Diseo Orientado a Objetos (DOO) se pueden realizar igualmente mediante programacin estructurada. Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas basadas en una internase de usuario grfico como Windows, OS/2, x-Windows, etc. 1.3 Reconocimiento de Objetos y Clases en el mundo real y la interaccin entre ellos Las personas nos formamos conceptos desde temprana edad. Cada concepto es una idea particular o una comprensin de nuestro mundo. Los conceptos adquiridos nos permiten sentir y razonar acerca de las cosas en el mundo. A estas cosas a las que se aplican nuestros conceptos se llaman objetos. Un objeto podra ser real o abstracto, como los ejemplos siguientes: Una factura. Una organizacin. Una figura. Una pantalla. Un plano de ingeniera. Un componente de un plano de ingeniera. Un cono en una pantalla. Un objeto puede estar compuesto por otros objetos. Estos ltimos, a su vez, pueden estar compuestos de objetos. Agrupacin de un conjunto de objetos de similares caractersticas. Una clase define las funciones y atributos de un tipo de objetos. Un objeto se convierte en una variable o instancia de la clase. Ejemplo: CLASE: Coche

Apuntes de Fundamentos de Programacin de Sistemas


Atributos: Color, Velocidad, Carburante, etc. Mtodos: Andar, Parar, Girar, etc.

Un sistema real est formado por varios tipos de objetos

(clases), que interactan entre s,

colaborando y pasndose informacin de unos a otros.


1.4 La Abstraccin y el encapsulamiento como un proceso natural Programacin y Abstraccin En general un programa no es mas que una descripcin abstracta de un procedimiento o fenmeno que existe o sucede en el mundo real. Los mecanismos utilizados por los programadores para controlar la complejidad; entre todos ellos se destaca la abstraccin. Los humanos hemos desarrollado una tcnica excepcionalmente potente para tratar la complejidad: abstraernos de ella. Incapaces de dominar en su totalidad los objetos complejos, se ignoran los detalles no esenciales, tratando en su lugar con el modelo ideal de objeto y centrndonos en el estudio de sus aspectos esenciales. [Wulft] Programacin y Abstraccin Abstraccin: Es la capacidad para encapsular y aislar la informacin del diseo y ejecucin. Abstraccin: Es la caracterizacin de un objeto de acuerdo a las propiedades que nos interesen en un instante de tiempo. Las caractersticas escogidas son relativas a la perspectiva del observador.

Figura 1.6: Abstraccin

Encapsulamiento de Objetos Encapsulacin: Es la manera de ocultar los detalles de la representacin interna de un objeto presentando solo la interface para el usuario (ver figura 1.7).

Apuntes de Fundamentos de Programacin de Sistemas

Figura 1.7: Encapsulacin. El encapsulamiento es una caracterstica de la programacin orientada a objetos. Cada objeto est aislado del exterior, es un mdulo natural, y la aplicacin entera se reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos asociados a un objeto contra su modificacin por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones. Resumiendo, la separacin de los datos de las operaciones, y la restriccin de que slo es posible tener acceso a los datos a travs de las operaciones definidas en la interfaz, permite seleccionar los TDA apropiados para resolver un problema determinado. Los TDA proveen una visin abstracta para describir propiedades de un conjunto de entidades y su uso es independiente del lenguaje de programacin. Por esta razn, se introduce una notacin que consiste de dos partes: Datos o Atributos: En esta parte se describen las estructuras de los datos usados dentro del TDA de manera informal. Operaciones o Mtodos: En esta parte se describen las operaciones que sern vlidas para el TDA. Un conjunto de estas operaciones sern la interfaz del TDA. Para cada operacin se deben describir los argumentos, as como sus posibles precondiciones y postcondiciones. Los TDA permiten la creacin de instancias con propiedades y comportamientos bien definidos. En la POO los TDA's se conocen como clases. Una clase define las propiedades de los objetos los cuales son entidades tangibles en el ambiente de orientacin a objetos. Los TDA's definen su funcionalidad poniendo nfasis en los datos, la estructura, las operaciones y en los axiomas y precondiciones. Consecuentemente, POO es ''programar con TDA's'' (y algo ms). Instancias (objetos) de TDA's (clases) se crean dinmicamente, se usan y se destruyen con el objetivo de resolver un problema real mediante la POO.

1.5 La Poo y la Complejidad del Software


La programacin Orientada a objetos (POO) es una forma especial de programar, ms cercana a como expresaramos las cosas en la vida real que otros tipos de programacin.

10

Apuntes de Fundamentos de Programacin de Sistemas


Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en trminos de objetos, propiedades, mtodos y otras cosas que veremos rpidamente para aclarar conceptos y dar una pequea base que permita soltarnos un poco con este tipo de programacin.

1.6 Conceptos del Ciclo de Vida del Software


Las fases del ciclo de vida del software son: concepcin, elaboracin, construccin y transicin. La concepcin es definir el alcance del proyecto y definir el caso de uso. La elaboracin es proyectar un plan, definir las caractersticas y cimentar la arquitectura. La construccin es crear el producto y la transicin es transferir el producto a sus usuarios [Booch 1998]. La solucin de un problema por computadora, requiere de siete pasos, dispuestos de tal forma que cada uno es dependiente de los anteriores, lo cual indica que se trata de un proceso complementario y por lo tanto cada paso exige el mismo cuidado en su elaboracin. Los siete pasos de la metodologa son los siguientes: 1. Definicin del problema 2. Anlisis de la solucin 3. Diseo de la solucin 4. Codificacin 5. Prueba y Depuracin 6. Documentacin 7. Mantenimiento 1.6.1 Definicin del problema Es el enunciado del problema, el cual debe ser claro y completo. Es fundamental conocer y delimitar por completo el problema, saber que es lo se desea realice la computadora, mientras esto no se conozca del todo, no tiene caso continuar con el siguiente paso. 1.6.2 Anlisis de la solucin Consiste en establecer una serie de preguntas acerca de lo que establece el problema, para poder determinar si se cuenta con los elementos suficientes para llevar a cabo la solucin del mismo, algunas preguntas son: Con qu cuento? Cules son los datos con los que se va a iniciar el proceso, qu tenemos que proporcionarle a la computadora y si los datos con los que cuento son suficientes para dar solucin al problema. Qu hago con esos datos? Una vez que tenemos todos los datos que necesitamos, debemos determinar que hacer con ellos, es decir que frmula, clculos, que proceso o transformacin deben seguir los datos para convertirse en resultados. Qu se espera obtener? Que informacin deseamos obtener con el proceso de datos y de que forma presentarla; en caso de la informacin obtenida no sea la deseada replantear nuevamente un anlisis en

11

Apuntes de Fundamentos de Programacin de Sistemas


los puntos anteriores. Es recomendable que nos pongamos en el lugar de la computadora y analicemos que es lo que necesitamos que nos ordenen y en que secuencia para producir los resultados esperados. 1.6.3 Diseo de la solucin Una vez definido y analizado el problema, se procede a la creacin del algoritmo (Diagrama de flujo pseudocdigo), en el cual se da la serie de pasos ordenados que nos proporcione un mtodo explcito para la solucin del problema. Es recomendable la realizacin de pruebas de escritorio al algoritmo diseado, para determinar su confiabilidad y detectar los errores que se pueden presentar en ciertas situaciones. Estas pruebas consisten en dar valores a la variable e ir probando el algoritmo paso a paso para obtener una solucin y si sta es satisfactoria continuar con el siguiente paso de la metodologa; de no ser as y de existir errores deben corregirse y volver a hacer las pruebas de escritorio al algoritmo. 1.6.4 Codificacin Consiste en escribir la solucin del problema (de acuerdo al pseudocdigo); en una serie de instrucciones detalladas en un cdigo reconocible por la computadora; es decir en un lenguaje de programacin (ya sea de bajo o alto nivel), a esta serie de instrucciones se le conoce como PROGRAMA. 1.6.5 Prueba y Depuracin Prueba es el proceso de identificar los errores que se presenten durante la ejecucin del programa; es conveniente que cuando se pruebe un programa se tomen en cuenta los siguientes puntos: 1. Tratar de iniciar la prueba con una mentalidad saboteadora, casi disfrutando la tarea de encontrar un error. 2. Sospechar de todos los resultados que arroje la solucin, con lo cual se debern verificar todos. 3. Considerar todas las situaciones posibles, normales y an las anormales. La Depuracin consiste en eliminar los errores que se hayan detectado durante la prueba, para dar paso a una solucin adecuada y sin errores. 1.6.6 Documentacin Es la gua o comunicacin escrita que sirve como ayuda para usar un programa, o facilitar futuras modificaciones. A menudo un programa escrito por una persona es usado por muchas otras, por ello la documentacin es muy importante; sta debe presentarse en tres formas: EXTERNA, INTERNA y AL USUARIO FINAL. Documentacin Interna Consiste en los comentarios o mensajes que se agregan al cdigo del programa, que explican las funciones que realizan ciertos procesos, clculos o frmulas para el entendimiento del mismo.

12

Apuntes de Fundamentos de Programacin de Sistemas

Documentacin Externa Tambin conocida como Manual Tcnico, est integrada por los siguientes elementos: Descripcin del Problema, Nombre del Autor, Diagrama del Flujo y/o Pseudocdigo, Lista de variables y constantes, y Codificacin del Programa, esto con la finalidad de permitir su posterior adecuacin a los cambios. Manual del Usuario Es la documentacin que se le proporciona al usuario final, es una gua que indica el usuario como navegar en el programa, presentando todas las pantallas y mens que se va a encontrar y una explicacin de los mismos, no contiene informacin de tipo tcnico. 1.6.7 Mantenimiento Se lleva a cabo despus de determinado el programa, cuando se ha estado trabajando un tiempo, y se detecta que es necesario hacer un cambio, ajuste y/o complementacin al programa para que siga trabajando de manera correcta. Para realizar esta funcin, el programa debe estar debida mente documentado, lo cual facilitar la tarea. 1.7 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 soporte fundamental es el modelo objeto. Los elementos ms importantes de este modelo son: Abstraccin Encapsulamiento Modularidad Jerarqua y Herencia Polimorfismo Abstraccin: Significa extraer las propiedades esenciales de un objeto que lo distinguen de los dems tipos de Objetos y proporciona fronteras conceptuales definidas respecto al punto de vista del observador. Es la capacidad para encapsular y aislar la informacin de diseo y ejecucin. La abstraccin es uno de los medios ms importantes, mediante el cual nos enfrentamos con la complejidad inherente al software. La abstraccin es la propiedad que permite representar las caractersticas esenciales de un objeto, sin preocuparse de las restantes caractersticas (no esenciales). Abstraccin es la tcnica de quitarle a una idea o a un objeto todos los acompaamientos innecesarios hasta que los deja en una forma esencial y mnima. Una buena abstraccin elimina todos los detalles poco importantes y le permite enfocarse y concentrarse en los detalles importantes. Una abstraccin se centra en la vista externa de un objeto, de modo que sirva para separar el comportamiento esencial de un objeto de su implementacin. Definir una abstraccin significa describir una entidad del mundo real, no importa lo compleja que pueda ser y, a continuacin, utilizar esta descripcin en un programa.

13

Apuntes de Fundamentos de Programacin de Sistemas


El elemento clave de la programacin orientada a objetos es la clase. Una clase se puede definir como una descripcin abstracta de un grupo de objetos, cada uno de los cuales se diferencia por su estado especfico y por la posibilidad de realizar una serie de operaciones. Por ejemplo, una pluma estilogrfica es un objeto que tiene un estado (llena de tinta o vaca) y sobre la cual se pueden realizar algunas operaciones (escribir, poner o quitar la tapa, llenar de tinta si est vaca, etc.). La idea de escribir programas definiendo una serie de abstracciones no es nueva, pero el uso de clases para gestionar dichas abstracciones en lenguajes de programacin ha facilitado considerablemente su aplicacin. Los lenguajes orientados a objetos proporcionan la Encapsulacin. La encapsulacin se puede utilizar para aplicar el concepto de Abstraccin. Tipos de Datos Abstractos Algunos autores describen a la POO como programacin con Tipos de Datos Abstractos (TDA) y sus relaciones. Aunque el concepto de Abstraccin es muy importante dentro de la POO, esta ltima consiste de ms herramientas.

1.7.1 Modularidad de Objetos La Modularidad es la propiedad que permite subdividir una aplicacin en partes ms pequeas (llamadas mdulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicacin en s y de las restantes partes. La modularizacin consiste en dividir un programa en mdulos que se puedan compilar por separado, pero que tienen conexiones con otros mdulos. Al igual que la encapsulacin, los lenguajes soportan la Modularidad de diversas formas. La Modularidad es la propiedad de un sistema que permite su descomposicin en un conjunto de mdulos cohesivos y dbilmente acoplados. Por supuesto no todos los mdulos son iguales: tomar un programa monoltico y separarlo de forma aleatoria en archivos no es ptimo. Se debe tener en cuenta los conceptos asociados de dependencia, acoplamiento, cohesin, interfaz, encapsulacin y abstraccin. Una vez identificado lo que es un buen mdulo, se puede contemplar la reutilizacin de un buen mdulo como componente. El Mdulo A depende del Mdulo B si cualquier cambio en el Mdulo B implica que el Mdulo A tambin tenga que ser modificado. A veces se dice que el Mdulo A es un cliente del Mdulo B, o que el Mdulo B acta como servidor del Mdulo A. En general, es normal que un mismo mdulo sea tanto cliente como servidor. 1.7.2 Herencia y Polimorfismo 1.7.2.1 Herencia La herencia es otra de las propiedades relativas a la POO, consiste en la propagacin de los atributos y las operaciones a travs de distintas sub-clases definidas a partir de una clase comn. Introduce, por tanto, una posibilidad de refinamiento sucesivo del concepto de clase. Nos permite definir una clase principal y , a travs de sucesivas aproximaciones, cualquier caracterstica de los objetos. A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales.

14

Apuntes de Fundamentos de Programacin de Sistemas

La herencia nos permite crear estructuras jerrquicas de clases donde es posible la creacin de sub-clases que incluyan nuevas propiedades y atributos. Estas sub-clases admiten la definicin de nuevos atributos, as como crear, modificar o inhabilitar propiedades. Para pensarlo de manera ms fcil podemos abstraernos al siguiente ejemplo. Pensemos en los distintos sub-modelos asociados a un modelo bsico de automvil. A partir de este modelo bsico, los fabricantes introducen distintas caractersticas (aire acondicionado, ABS, distintas tapiceras , acabados, etc.) que crean subclases. Todas estas sub-clases tienen en comn la estructura bsica (chasis , direccin , etc.) o varan slo en algunos de sus componentes. Asociemos a este tipo bsico una clase cuyos atributos representen las piezas que componen el coche. Las sub-clases aportarn sus propios atributos (en el caso de vehculos con aire acondicionado, todos aquellas piezas que lo componen), permitiendo la definicin de todos los posibles modelos.

Adems, es posible que una sub-clase herede atributos y propiedades de ms de una clase. Este proceso se denomina herencia mltiple y lo veremos con ms detalle en captulos posteriores. La herencia es, sin duda alguna, una de las propiedades ms importantes de la OOP, ya que permite, a travs de la definicin de una clase bsica, ir aadiendo propiedades a medida que sean necesarias y, adems, en el sub-conjunto de objetos que sea preciso. La herencia permite que los objetos pueden compartir datos y comportamientos a travs de las diferentes sub-clases, sin incurrir en redundancia. Ms importante que el ahorro de cdigo, es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa. 1.7.2.2 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.

15

Apuntes de Fundamentos de Programacin de Sistemas


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. 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 de 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. sta es precisamente una de las causas de la revolucin que ha supuesto la introduccin de los lenguajes orientados a objetos dentro de la programacin.

16

Apuntes de Fundamentos de Programacin de Sistemas

Conclusin. Identidad, clasificacin, polimorfismo y herencia caracterizan a los lenguajes orientados a objetos. Cada uno de estos conceptos puede utilizarse aisladamente, incluso aparecen en otras metodologas de programacin, pero juntos se complementan en una relacin sinrgica. Los beneficios de la programacin orientada a objetos son ms que los que pueden verse a simple vista. El nfasis en las propiedades esenciales de un objeto, fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente ms preciso, general y robusto que si pusiramos el nfasis en los procedimientos y los datos por separado.

Captulo 2. Tcnicas Bsicas de Modelado de Objetos


2.1 Definicin de Clases Atributos Mtodos y Objetos
Una clase es una representacin de un TDA. Esta provee los detalles de la implementacin de los datos y de las operaciones. De manera formal se puede decir que: Una clase es la implementacin de un tipo de datos abstracto (TDA) y define los atributos y los mtodos de la TDA. Las instancias de clases se conocen como objetos. Entonces las clases definen las propiedades de un conjunto de objetos. CLASE: Agrupacin de un conjunto de objetos de similares caractersticas. Una clase define las funciones y atributos de un tipo de objetos. Un objeto se convierte en una variable o instancia de la clase. Ejemplo: CLASE: Coche Atributos: Color, Velocidad, Carburante, etc. Mtodos: Andar, Parar, Girar, etc.

Un sistema real est formado por varios tipos de objetos

(clases), que interactan entre s,

colaborando y pasndose informacin de unos a otros.


Objetos: Como se mencion antes, los objetos son instancias de clases y cada objeto se
diferenca de otros similares por su nombre particular (identidad). Es posible entonces, tener dos objetos con los mismos datos pero distinto nombre. Esto es similar a lo que sucede con los lenguajes tradicionales de programacin donde se puede tener, por ejemplo, dos enteros i y j , ambos conteniendo el valor de ''2''. En este caso ''i'' y ''j'' se usan para identificar a los dos enteros. El conjunto de valores asignados a los datos de un objeto, en un instante determinado, se conoce como el estado del objeto. El estado del objeto cambia de acuerdo a los mtodos que se aplican sobre l. La posible secuencia de cambios de estado se conoce como el comportamiento del objeto: Comportamiento: El comportamiento de un objeto est definido por el conjunto de mtodos que se pueden aplicar sobre l.

17

Apuntes de Fundamentos de Programacin de Sistemas


Un objeto puede ser cualquier cosa, real o abstracta, acerca de la cual se almacenan datos y las funciones que manejan y controlan estos datos. Ejemplo de Objetos: coche, bicicleta, empleado, vector, ... Ejemplo de No Objetos: color, tamao, edad, ... Se tienen hasta ahora dos conceptos importantes de la orientacin a objetos, clases y objetos. Podra decirse que la POO es la accin de implementar clases y crear instancias de ellas. En la ejecucin de un programa OO, las instancias de clases, los objetos, realizan ciertas acciones para obtener la solucin de un problema cambiando. Consecuentemente, se puede pensar al programa en ejecucin como una coleccin de objetos en interaccin. La pregunta inmediata es: Cmo es que estos objetos interactan?. La respuesta es: por medio de intercambio de mensajes. Ejemplo: CLASE: Coche Atributos: Color, Velocidad, Carburante. Mtodos: Andar, Parar, Girar.

Nombre de objeto 1: Coche Fernando Funciones permitidas objeto 1: Andar, Parar, Girar Datos objeto 1: gris, 140 Km/h, sper Nombre de objeto 2: Coche Nuria Funciones permitidas objeto 2: Andar, Parar, Girar Datos objeto 2: rojo, 170 Km/h, sin plomo 2.1.1 Mensajes Un programa OO en ejecucin, es un conjunto de objetos que son creados en tiempos de ejecucin, interactan entre s y finalmente se destruyen cuando ya no son necesarios. Esta interaccin se basa en el envo de mensajes entre objetos. Un mensaje es enviado a un objeto para pedirle que realice una cierta accin sobre sus datos. El envo de mensajes en la POO es similar a la llamada a procedimientos o subrutinas de las tcnicas estructuradas. Sin embargo, en la POO existen objetos autnomos que se comunican unos con otros por medio del envo de mensajes. Los objetos reaccionan cuando reciben algn mensaje de otro objeto y realizan una accin sobre sus datos. Existe tambin la posibilidad de que el objeto receptor niegue la ejecucin de un mtodo por medio de diferentes niveles de acceso. Un mensaje es una peticin a un objeto para la invocacin de uno de sus mtodos. Un mensaje contiene el nombre del mtodo, los argumentos del mtodo. Entonces, la invocacin de un mtodo de un objeto es la reaccin causada por la recepcin de un mensaje. Un mtodo se puede definir como: Mtodo: Un mtodo est asociado con una clase y es aqu donde se definen las operaciones que se llevarn a cabo sobre los datos. En otras palabras, un mtodo define el comportamiento de los objetos. Un objeto invoca mtodos como una reaccin a la recepcin de un mensaje.

2.2 El Modelo como resultado de la Abstraccin

18

Apuntes de Fundamentos de Programacin de Sistemas


El primer problema que enfrenta un programador cuando inicia un proyecto grande de programacin, es el problema mismo que se quiere resolver y como hacer abstracciones de este ltimo. Tpicamente, se enfrenta con problemas de la ''vida real'' y se quiere hacer la vida ms fcil construyendo un programa que resuelva el problema de manera automtica. Sin embargo, los problemas de la vida real son muchas veces obscuros y difciles de entender. Entonces, es necesario dejar de lado los detalles de la implementacin y tratar de obtener una visin abstracta, o un modelo, del problema. Este proceso de modelado es conocido como abstraccin y se ilustra en la figura 2.1.

Figura 2.1 Modelo El modelo define una visin abstracta del problema. Esto implica que el modelo se enfoca en la definicin de las propiedades del problema. Estas propiedades incluyen: Las estructuras de datos que sern afectadas y modificadas Las operaciones identificadas por el problema.

Una abstraccin es entonces, la estructuracin de un problema de la vida real en entidades bien definidas por sus datos y sus operaciones. Por lo tanto, estas entidades combinan datos y operaciones y no estn desacopladas. Una entidad con las propiedades descritas antes se conoce como un tipo de datos abstracto o TDA. La figura 2.2 muestra un TDA. Slo algunas operaciones son visibles desde el exterior y definen la interfaz de el TDA.

Figura 2.2: Tipo de Datos Abstracto.

19

Apuntes de Fundamentos de Programacin de Sistemas


El ocultamiento de los datos de el TDA y slo proveer de una interfaz bien definida se conoce como encapsulacin.

2.3 El UML como una Herramienta de Modelado de Objetos


El lenguaje UML (en ingls, Unified Modeling Language) es un lenguaje para la especificacin, visualizacin, construccin y documentacin de las partes de un sistema de software. Consiste en una coleccin de las mejores prcticas de ingeniera que mostraron ser exitosas en el modelamiento de sistemas complejos, a tal punto que muchas empresas estn actualmente incorporando UML para el desarrollo de sus productos. Fu creado en 1996, por el Object Mangement Group1 con sucesivas modificaciones y agregados para permitir mayor funcionalidad, gracias al aporte y la participacin de empresas como IBM, Hewlett Packard, Microsoft, Unisys y Oracle, entre otras. UML es un lenguaje predominantemente visual, que consiste de varios diagramas, cada uno modelando un parte esencial del sistema a construir. La especificacin completa de UML incluye doce diagramas, divididos en tres categoras. Cuatro diagramas son utilizados para representar la estructura esttica de la aplicacin en desarrollo, cinco diagramas representan diferentes aspectos del comportamiento dinmico y tres representan la forma en que se organizan los mdulos de la aplicacin. Nos centraremos aqu nicamente en el Diagrama de Clases, el cual nos permite disear la estructura del programa en funcin de las clases que lo componen. 2.3.1 DIAGRAMAS DE CLASES Las clases son dibujadas con un rectngulo, dividido en tres partes: el nombre de la clase, los atributos, y las operaciones correspondientes. Puede agregarse tambin una divisin en donde se especifican las responsabilidades de esa clase. Nombre Atributos Operaciones Responsabilidades Nombre: El nombre de la clase debe ser lo menos ambiguo posible, usualmente un sustantivo (Nombre de las cosas, ejemplo: libro, banco, etc.). Atributos: Los atributos describen las caractersticas de los objetos. Poseen un tipo, que nos indica qu clase de atributo es. Si bien existen ciertos tipos primitivos, como enteros, booleanos y reales, cualquier tipo puede ser usado, incluso otras clases. La restriccin ms importante es que los atributos son visibles nicamente por la clase que los contiene . Operaciones: Las operaciones son utilizadas para manipular los atributos o realizar consultas.

A diferencia de los atributos, las operaciones pueden tener diferente visibilidad hacia otras clases. Responsabilidades: Las responsabilidades son las obligaciones de una clase y son definidas por el usuario. Si bien existe un compartimiento dentro de la clase para la especificacin de las responsabilidades, stas son de carcter opcional.

20

Apuntes de Fundamentos de Programacin de Sistemas

Ejemplo:

Punto
x: entero; y: entero Punto(x,y:entero) mover(dist_x, dist_y:entero) distancia(P:Punto):real Representa un punto en el plano Dependiendo del nivel de detalle que queramos alcanzar en el modelo, se pueden obviar algunas de las divisiones del grfico de clases. Esto permite simplificar el diagrama completo, de acuerdo al nivel de abstraccin necesario. Puede utilizarse, por ejemplo:

Notas: A los grficos de clases se les puede agregar notas o comentarios sobre algn aspecto interesante de la clase. Estas notas pueden incluir observaciones sobre la clase, alguna restriccin de uso, e incluso el pseudo-cdigo de algunas operaciones. Se grafican por medio de un rectngulo con la esquina superior derecha plegada, como si fuera una hoja, y se une con una lnea al elemento de la clase al cual corresponde la nota.

En este ejemplo se agrega un comentario sobre la operacin distancia. Ms adelante veremos cmo especificar a travs de notas el cdigo correspondiente a una operacin de la clase. 2.3.2 DIAGRAMAS DE OBJETOS Hasta ahora, slo hemos mostrado clases en el modelo del sistema. Los objetos pueden modelarse tambin en un diagrama de objetos. Este diagrama utiliza la misma notacin y relaciones que el diagrama de clases, puesto que los objetos son simplemente instancias de esas mismas clases. Mientras el diagrama de clases muestra las diferentes clases y sus relaciones, el diagrama de objetos muestra instancias especficas de estas clases, y los vnculos entre estas instancias en un momento dado. Los objetos son mostrados como las clases, pero con el nombre del objeto subrayado y precedido del nombre de la clase que representa. La sintaxis correspondiente es:

21

Apuntes de Fundamentos de Programacin de Sistemas


<nombre del objeto>:<clase> Por ejemplo, utilizando el diagrama de las clases Auto y Motor, una instancia particular de estas clases puede ser:

2.3.3 ESPECIFICACIN DE LAS OPERACIONES. En las notas que se agregan al diagrama de clases podemos explicitar la implementacin de una o ms operaciones de la clase. Para ello utilizaremos la siguiente convencin:

En las notas tambin explicitamos los invariantes de clase. En este caso, la nota va unida por un vnculo al rectngulo que representa la clase. El lenguaje que utilizaremos para la especificacin de las operaciones es el Lenguaje de Diseo de Algoritmos, (sentencias de asignacin con, condicionales " si..entonces..si no...", ciclos "repetir..hasta" y "repetir mientras..", sentencia case, etc) con algunas operaciones especiales que se detallan a continuacin. 2.4.1 Analizar el enunciado del Problema

El anlisis comienza con la definicin de un problema generada por clientes y, posiblemente, por los desarrolladores. El anlisis hace que sea ms precisa y expone las ambigedades e incongruencias y no debera tomarse como inmutable, sino que tiene que servir como base para refinar los requisitos reales. El analista debe ser para los requisitos verdaderos de las decisiones del diseo y de implementacin disfrazada de requisitos y atacar a estos pseudorequisitos, porque restringen la flexibilidad. El propsito del anlisis subsiguiente es comprender en su totalidad el problema y sus implicaciones. 2.4.2 Identificar funciones del Sistema

22

Apuntes de Fundamentos de Programacin de Sistemas

Consiste en describir por escrito a nivel tcnico los procedimientos relacionados con el programa y su modo de uso. Tambin se debe documentar el programa para que sea ms entendible. Para quines son la documentacin? - Usuarios (Digitadores) - Operadores - -Programadores Analistas de sistemas Documentos que se elaboran: Manual de Usuario y Manual del Analista. A los usuarios se les elabora un manual de referencia para que aprendan a utilizar el programa. Esto se hace a travs de capacitaciones y revisin de la documentacin del manual de usuario. El manual del usuario no est escrito a nivel tcnico sino al de los distintos usuarios previstos y explica en detalle cmo usar el programa: descripcin de las tareas que realiza el programa, instrucciones necesarias para su instalacin puesta en marcha y funcionamiento, recomendaciones de uso, mens de opciones, mtodo de entrada y salida de datos, mensajes de error, recuperacin de errores, etc. A los operadores por si se presentan mensajes de error, sepan cmo responder a ellos. Adems que se encargan de darle soporte tcnico al programa. A los programadores a travs del manual del analista para que recuerden aspectos de la elaboracin del programa o en caso que otras personas puedan actualizarlo o modificarlo (darle mantenimiento) y no son necesariamente las personas que lo disearon. Es por ello, que la documentacin debe contener algoritmos y flujogramas de los diferentes mdulos que lo constituyen y las relaciones que se establecen entre ellos; listados del programa, corridas, descripcin de variables que se emplean en cada mdulo, cules son comunes a diferentes mdulos y cules locales; descripcin de los ficheros de cada mdulo y todo lo que sea de importancia para un programador.

2.5 Anlisis
2.5.1 Descubrir Objetos en el Dominio del Problema

Si se observa alrededor en una habitacin, existen un conjunto de objetos fsicos que pueden ser fcilmente identificados, clasificados y definidos (en trminos de atributos y operaciones). Pero cuando se observa el espacio de un problema en una aplicacin de software, los objetos pueden ser ms difciles de identificar. Se puede empezar a identificar objetos examinando el planteamiento del problema o realizando un anlisis sintctico gramatical en la narrativa del sistema que se va a construir. Los objetos se determinan subrayando cada nombre o clusula nominal e introducindola en una tabla simple. Los sinnimos deben destacarse. Si se requiere del objeto que implemente una solucin, entonces ste formar parte del espacio de

23

Apuntes de Fundamentos de Programacin de Sistemas


solucin; en caso de que el objeto se necesite solamente para describir una solucin, ste forma parte del espacio del problema. Los objetos se manifiestan de alguna de las formas siguientes: Entidades Externas que producen o consumen informacin a usar por un sistema computacional. Por ejemplo: otros sistemas, dispositivos, personas. Cosas que son parte del dominio de informacin del problema. Por ejemplo: informes, presentaciones, cartas, seales. Ocurrencias o Sucesos que ocurren dentro del contexto de una operacin del sistema. Por ejemplo: una transferencia de propiedad o la terminacin de una serie de movimientos en un robot. Papeles o Roles desempeados por personas que interactan con el sistema. Por ejemplo: director, ingeniero, vendedor. Unidades Organizacionales que son relevantes en una aplicacin. Por ejemplo: divisin, grupo, equipo. Lugares que establecen el contexto del problema y la funcin general del sistema. Por ejemplo: planta de produccin o muelle de carga. Estructuras que definen una clase de objetos o, en casos extremos, clases relacionadas de objetos. Por ejemplo: sensores, vehculos de cuatro ruedas o computadoras.

2.5.2 Identificar Atributos de los Objetos

Los atributos describen un objeto que ha sido seleccionado para ser incluido en el modelo de anlisis. En esencia, son los atributos los que definen al objeto, los que clarifican lo que representa el objeto en el contexto del espacio del problema. Por ejemplo, si se tratara de construir un sistema de estadsticas para jugadores profesionales de bisbol, los atributos del objeto Jugador seran muy diferentes de los atributos del mismo objeto cuando se use dentro del contexto de un sistema de pensiones para jugadores profesionales. En el primero, atributos tales como nombre, posicin, promedio de bateo, porcentaje de estancia en el campo de juego, aos jugados y partidos jugados pueden ser relevantes. En el segundo caso, algunos de estos atributos seran relevantes pero otros seran reemplazados (o potenciados) por atributos como salario medio, crdito total, opciones elegidas para el plan de pensin, direccin postal, etc. Para desarrollar un conjunto significativo de atributos para un objeto, el analista puede estudiar de nuevo la narrativa del proceso (o descripcin del mbito del alcance) para el problema y seleccionar aquellos elementos que razonablemente pertenecen al objeto. Adems, para cada objeto debe responderse el siguiente interrogante: Qu elementos (compuestos y/o simples) definen completamente al objeto en el contexto del problema actual? .

2.5.3 Identificar Mtodos en los Objetos

Las operaciones indican el comportamiento del objeto dentro del sistema, cambia uno o ms atributos contenidos en el sistema. Pueden ser clasificados entre tres grandes categoras Operaciones que manipulan datos Operaciones que realizan algn Calculo

24

Apuntes de Fundamentos de Programacin de Sistemas


Operaciones que monitorizan un objeto frente a la ocurrencia de un sistema de control

El ciclo de vida de un objeto puede resumirse de la siguiente manera: Crear el objeto Modificarlo Manipulacin Borrar.

Captulo 3. Tcnicas de Diseo Detallado


3.1 Diseo Algoritmico
Diseo de algoritmo Algoritmo: es una secuencia de pasos ordenados Para llegar a un fin. Diversos algoritmos pueden terminar la misma tarea con un diverso sistema de instrucciones en ms o menos el mismo tiempo. Lenguaje algortmico: Es una representacin, en cualquier forma diagrama de flujo, pseudocdigo o cualquier otra), de un algoritmo. Lenguaje de Programacin: son lenguajes especiales que ayudan al usuario a comunicarse con la computadora. Establecen una comunicacin entre el humano (que prefiere usar palabras, el sistema decimal) y la computadora, que trabaja solo con nmeros binarios (0's y 1's). Tipos de Lenguajes: Lenguaje de mquina est orientado hacia la mquina que est constituida por varios arreglos de "bits.Es el lenguaje original de la computadora el cual es generado por el "software", y no por el programador. dificil de entender para el humano Lenguaje de bajo nivel: Es un lenguaje de programacin bien cercano al lenguaje de mquina. Es difcil de entender por las personas y requiere que los programadores codifiquen las instrucciones con muchos detalles. Ejemplo: lenguaje ensamblador. Lenguaje de alto nivel: Es un lenguaje que se asemeja ms al lenguaje humano que a un lenguaje de mquina o ensamblador. Es ms fcil escribir programas en este lenguaje, pero luego deben ser traducidos por compiladores o intrpretes para que la computadora los entienda.

Antes de iniciar, es necesario conocer los conceptos principales que son de uso necesario para la solucin de problemas por medio de computadoras. Algoritmo: es un conjunto finito de instrucciones que, cuando se ejecutan, efectan una tarea particular. Un algoritmo es un sistema definido de instrucciones, finito en nmero, para lograr una cierta tarea que, dado un sistema de entradas, d lugar a un cierto estado reconocible. El concepto de un algoritmo es ilustrado a menudo por el ejemplo de una receta, aunque muchos algoritmos son mucho ms complejos; los algoritmos tienen a menudo pasos que repitan (iteren) o requieran decisiones (tales como lgica o comparacin) hasta que se termina la tarea Diversos algoritmos pueden terminar la misma tarea con un diverso sistema de instrucciones en ms o menos el mismo tiempo, espacio, o esfuerzo que otros. Por ejemplo, tenemos dos diversas recetas para hacer una ensalada de papa, una puede tener cscara antes de cocer la papa, mientras que la otra presenta los pasos al revs, ambas hacen que los pasos se repitan con todas las papas y termina cuando la ensalada esta lista.

25

Apuntes de Fundamentos de Programacin de Sistemas


Ejecutando correctamente un algoritmo no solucionar el problema si el algoritmo es daado o no es apropiado para el problema. Por ejemplo, la ejecucin del algoritmo de la ensalada de papa fallar si no tenemos papas, incluso si todos los movimientos de preparar la ensalada se realizan como si las papas estuvieran all. Lenguaje algortmico: Es una representacin, en cualquier forma (diagrama de flujo, pseudocdigo o cualquier otra), de un algoritmo. Lenguaje de Programacin: Los lenguajes de programacin son lenguajes especiales que ayudan al usuario a comunicarse con la computadora. Establecen una comunicacin entre el humano (que prefiere usar palabras, el sistema decimal) y la computadora, que trabaja solo con nmeros binarios (0's y 1's). Tipos de Lenguajes: Lenguaje de mquina: El lenguaje de mquina est orientado hacia la mquina que est constituida por varios arreglos de "bits". Este lenguaje es fcil de entender por la computadora, pero difcil para el usuario. Es el lenguaje original de la computadora el cual es generado por el "software", y no por el programador. Lenguaje de bajo nivel : Es un lenguaje de programacin bien cercano al lenguaje de mquina. Es difcil de entender por las personas y requiere que los programadores codifiquen las instrucciones con muchos detalles. Ejemplo: lenguaje ensamblador. Lenguaje de alto nivel: Es un lenguaje que se asemeja ms al lenguaje humano que a un lenguaje de mquina o ensamblador. Es ms fcil escribir programas en este lenguaje, pero luego deben ser traducidos por compiladores o intrpretes para que la computadora los entienda.

3.1.1 Elementos y Reglas para la Representacin de Algoritmos ELEMENTOS Y REGLAS PARA LA REPRESENTACIN DE ALGORITMOS Las tres tcnicas de formulacin de algoritmos ms ocupadas son: Pseudocdigo: Es un lenguaje de especificacin de algoritmos. El uso de tal lenguaje hace el paso de codificacin final (esto es, la traduccin a un lenguaje de programacin) relativamente fcil. era un medio para representar bsicamente las estructuras de control de programacin estructurada. Se considera un primer borrador, dado que el pseudocdigo tiene que traducirse posteriormente a un lenguaje de programacin. Y no puede ser ejecutado por una computadora. Diagramas de Flujo: Se basan en la utilizacin de diversos smbolos para representar operaciones especficas. Se les llama diagramas de flujo porque los smbolos utilizados se conectan por medio de flechas para indicar la secuencia de operacin. Diagramas Estructurados (nassi-schneiderman: o Chapn, es como un diagrama de flujo en el que se omiten las flechas de unin y las cajas son continuas. Las acciones sucesivas se escriben en cajas sucesivas, y, como en los diagramas de flujo, se pueden escribir diferentes acciones en una caja. son una tcnica que permite formular algoritmos mediante una representacin geomtrica y de asignacin de espacios de un bloque especfico.

Las tres tcnicas de formulacin de algoritmos ms ocupadas son: Diagrama de flujo, Pseudocdigo y Diagramas estructurados

26

Apuntes de Fundamentos de Programacin de Sistemas


Pseudocdigo: Es un lenguaje de especificacin de algoritmos. El uso de tal lenguaje hace el paso de codificacin final (esto es, la traduccin a un lenguaje de programacin) relativamente fcil. El pseudocdigo naci como un lenguaje similar al ingls y era un medio para representar bsicamente las estructuras de control de programacin estructurada. Se considera un primer borrador, dado que el pseudocdigo tiene que traducirse posteriormente a un lenguaje de programacin. Cabe sealar que el pseudocdigo no puede ser ejecutado por una computadora. La ventaja del pseudocdigo es que en su uso en la planificacin de un programa, el programador se puede concentrar en la lgica y en las estructuras de control y no preocuparse de las reglas de un lenguaje especfico. Es tambin fcil modificar el pseudocdigo si se descubren errores o anomalas en la lgica del programa, adems de todo esto es fcil su traduccin a lenguajes como pascal, COBOL, C, FORTRAN o BASIC. El pseudocdigo utiliza para representar las acciones sucesivas palabras reservadas en ingls (similares a sus homnimos en los lenguajes de programacin), tales como star,begin, end, stop, ifthen-else, while, repeat-until.etc Diagramas de Flujo: Se basan en la utilizacin de diversos smbolos para representar operaciones especficas. Se les llama diagramas de flujo porque los smbolos utilizados se conectan por medio de flechas para indicar la secuencia de operacin. La simbologa utilizada para la elaboracin de diagramas de flujo es variable y debe ajustarse a un patrn definido previamente. La simbologa utilizada para la elaboracin de diagramas de flujo es variable y debe ajustarse a un patrn definido previamente. SIMBOLOGA UTILIZADA EN LOS DIAGRAMAS DE FLUJO Smbolo Funcin Inicio/Fin Smbolo Funcin Conector (misma Hoja)

Proceso

Conector (cambio de hoja)

Lectura Ciclos Escritura

Decisin

Indica el flujo

27

Apuntes de Fundamentos de Programacin de Sistemas

Diagramas Estructurados (nassi-schneiderman): El diagrama N-S de Nassi-Schneiderman, tambin conocido como diagrama de Chapn, es como un diagrama de flujo en el que se omiten las flechas de unin y las cajas son contiguas. Las acciones sucesivas se escriben en cajas sucesivas, y, como en los diagramas de flujo, se pueden escribir diferentes acciones en una caja. Los Diagramas Estructurados, son una tcnica que permite formular algoritmos mediante una representacin geomtrica y de asignacin de espacios de un bloque especfico.

3.2 Diseo Algortmico de Funciones

Unidad 4 Introduccin a Programacin


4.1 Clasificacin Del Software
EL SOFTWARE son los programas los cuales contienen las instrucciones responsables de que el Hardware realice su tarea, se le denomina Software a todos los componentes intangibles de un ordenador, es decir, el conjunto de programas y procedimientos necesarios para hacer posible la realizacin de una tarea especifica CLASIFICACIN DEL SOFTWARE Software de Sistema: El software de sistema son los programas bsicos el cual controla a la computadora, tambin llamado sistema operativo el cual tiene tres grandes funciones: coordina y manipula el hardware del ordenador, como la memoria, las unidades de disco; organiza los archivos en diversos dispositivos de almacenamiento y gestiona los errores de hardware y del mismo software. Software de Aplicacin El software de aplicacin permite a los usuarios llevar a cabo una o varias tareas mas especificas, el software de aplicacin son aquellos que nos ayudan a la elaboracin de una determinada tarea, este tipo de software es diseado para facilitar al usuario en la realizacin de un determinado tipo de trabajo. Ejem Office de Microsoft. Software de Desarrollo (programacin o lenguaje) cualquier lenguaje artificial que podemos utilizar para definir una secuencia de instrucciones para su procesamiento por un ordenador. El software de programacin proporciona herramientas para ayudar al programados s escribir programas informticos y a usar diferentes lenguajes de programacin de forma practica(Java,), El software son los programas los cuales contienen las instrucciones responsables de que el Hardware realice su tarea, se le denomina Software a todos los componentes intangibles de un ordenador, es decir, el conjunto de programas y procedimientos necesarios para hacer posible la realizacin de una tarea especifica, en contraposicin a los componentes fsicos de un sistema de computo. Esto incluye aplicaciones informticas tales como un procesador de textos, que permite al usuario realizar una tarea, sistema operativo que permite funcionar al resto de los programas adecuadamente. Clasificacin del Software de acuerdo al tipo de trabajo realizado Software de Sistema Coleccin de programas residentes en la computadora, este tipo de software resulta pieza esencial para el uso de la computadora y el desarrollo de ms software, una definicin mas que podemos dar es que es una de las partes que permite el funcionamiento de la computadora, el objetivo del software de sistema es aislar tanto como sea posible al programador de aplicaciones de los detalles del computador particular que se use, especialmente de las caractersticas fsicas de la memoria, impresoras, pantallas, teclados etc.

28

Apuntes de Fundamentos de Programacin de Sistemas


El software de sistema son los programas bsicos el cual controla a la computadora, tambin llamado sistema operativo el cual tiene tres grandes funciones: coordina y manipula el hardware del ordenador, como la memoria, las unidades de disco; organiza los archivos en diversos dispositivos de almacenamiento y gestiona los errores de hardware y del mismo software. Los sistemas operativos pueden ser de tarea nica o multitarea. Los sistemas operativos de tarea nica, los ms primitivos, solo pueden manejar un proceso en cada momento. Todos los sistema operativos modernos son multitarea, esto quiere decir que puedes realizar varias acciones a la ves como por ejemplo mandar a imprimir y estar trabajando con otro documento o lo mas usual estar navegando por internet y escuchar muisca. Software de Aplicacin El software de aplicacin permite a los usuarios llevar a cabo una o varias tareas mas especificas, en cualquier campo de actividad susceptible de ser automatizado o asistido, con especial nfasis en los negocios, tambin podemos decir que el software de aplicacin son aquellos que nos ayudan a la elaboracin de una determinada tarea, este tipo de software es diseado para facilitar al usuario en la realizacin de un determinado tipo de trabajo. Ejem Office de Microsoft (Word, Excel, One Note, etc. El software de aplicacin resulta una solucin informtica para la automatizacin de ciertas tareas complicadas como puede ser la contabilidad y gestin de una organizacin, como ejemplo del software de aplicacin podemos mencionar a la paquetera que nos ofrece Office de Microsoft (Word, Excel, One Note, etc.), Word Perfec, Lotus 123. Software de Desarrollo El software de desarrollo recibe varios nombre, como software de programacin o lenguaje de programacin del software, en si el software de desarrollo es cualquier lenguaje artificial que podemos utilizar para definir una secuencia de instrucciones para su procesamiento por un ordenador. Es complicado definir que es y que no es un software de desarrollo, generalmente se dice que la traduccin de las instrucciones a un cdigo que comprende la computadora deber ser completamente sistemtica (sigue o se ajusta a un conjunto de reglas). El software de programacin proporciona herramientas para ayudar al programados s escribir programas informticos y a usar diferentes lenguajes de programacin de forma practica(Java,), entre los lenguajes de programacin mas utilizados podemos mencionar: C++, Java, C#, Visual Basic, etc.

4.2 Conceptos de la Programacin

PROGRAMACIN: es automatizar y definir una serie de procesos para resolver un problema y obtener un resultado final. Un programa es el conjunto de instrucciones que se le dan al ordenador para resolver un problema o tarea determinada. se componen de ordenes (en adelante llamadas instrucciones) que es lo que en si mismo le dice al ordenador lo que tiene que hacer. Un conjunto de esas instrucciones forman el programa. Programa:Un programa es un conjunto de instrucciones u ordenes basadas en un lenguaje de programacin que una computadora interpreta para resolver un problema o una funcin especifica. LENGUAJE DE PROGRAMACIN es aquel elemento dentro de la informtica que nos permite crear programas mediante un conjunto de instrucciones, operadores y reglas de sintaxis. un lenguaje de programacin es un sistema notacional para describir conputaciones de una forma legible tanto para la maquina como para el ser humano DATOS:Un dato puede definirse como la unidad mnima de informacin o bit, puede ser un caracter una palabra, etc. TIPOS DE DATOS SIMPLES O PRIMITIVOS: son aquellos que no tienen descomposicin, estn predefinidos en el lenguaje, ejemplo de estos son: NUMERICOS enteros (int, byte, long), reales (flota, double), carcter ( Xchar) y booleanos( VERDAD,FALSO).. Estructurales o compuestos: Son aquellos que agrupan un conjunto de datos primitivos, como pueden ser: Arreglos, pilas o estructuras e incluso las cadenas de caracteres (datos String).

29

Apuntes de Fundamentos de Programacin de Sistemas


Programacin: es automatizar y definir una serie de procesos para resolver un problema y obtener un resultado final. Un programa es el conjunto de instrucciones que se le dan al ordenador para resolver un problema o tarea determinada. Consiste en proporcionar a un equipo un conjunto de instrucciones (o sentencias) que deben ser ejecutadas en orden, y que proporcionan una salida. Preparacin de los datos previos indispensables para obtener la solucin de un problema mediante las instrucciones codificadas de un ordenador. Lenguaje de Programacin Se utilizan para indicar al ordenador las acciones que ha de realizar para resolver un determinado problema. Bsicamente los lenguajes de programacion se componen de ordenes (en adelante llamadas instrucciones) que es lo que en si mismo le dice al ordenador lo que tiene que hacer. Un conjunto de esas instrucciones forman el programa 4.2.1 Definicin de Programa Un programa es un conjunto de instrucciones u ordenes basadas en un lenguaje de programacin que una computadora interpreta para resolver un problema o una funcin especifica. 4.2.2 Definicin de Programacin La programacin es generar un conjunto de sentencias utilizadas para escribir secuencias de instrucciones para que ejecute una computadora usando un lenguaje de programacin. 4.2.3 Definicin Lenguajes de Programacin Un lenguaje de programacin es aquel elemento dentro de la informtica que nos permite crear programas mediante un conjunto de instrucciones, operadores y reglas de sintaxis; que pone a disposicin del programador para que este pueda comunicarse con los dispositivos hardware y software existentes. UN LENGUAJE DE PROGRAMACIN ES UN SISTEMA NOTACIONAL PARA DESCRIBIR CONPUTACIONES DE UNA FORMA LEGIBLE TANTO PARA LA MAQUINA COMO PARA EL SER HUMANO

4.3 Datos Definicin


Un dato puede definirse como la unidad mnima de informacin o bit, puede ser un caracter una palabra, etc. 4.3.1 Tipos de Datos Simples o primitivos: son aquellos que no tienen descomposicin, estn predefinidos en el lenguaje, ejemplo de estos son: enteros (int, byte, long), reales (flota, double), carcter (char) y booleanos..

Estructurales o compuestos: Son aquellos que agrupan un conjunto de datos primitivos, como pueden ser: Arreglos, pilas o estructuras e incluso las cadenas de caracteres (datos String).

4.3.2 Identificadores Es el nombre utilizado para referenciar variables, constantes, tipos, funciones y otros objetos definidos por el usuario.

30

Apuntes de Fundamentos de Programacin de Sistemas


Un identificador puede tener uno o mas caracteres (letras, digitos y caracter de subrayado), siendo significativos los primeros 32. El primer caracter debe ser una letra o un smbolo de _. Se consideran caracteres distintos las maysculas y las minsculas. 4.3.3 Sistema de Numeracin Binaria y Hexadecimal El sistema binario es el que usan los ordenadores, que es como si slo tuvieran un dedo, su unidad bsica de memoria, el bit, slo puede tomar dos valores, inactivo o activo, y se codifican como 0 y 1, respectivamente. Los ordenadores se quedan sin dedos enseguida, en cuanto tienen que contar ms de uno, as que aaden ms dgitos. Por ejemplo, veamos el nmero binario 10110. Estamos en base 2, as que el nmero se calcula as: 0 * 2^0 + 1 * 2^1 + 1 * 2^2 + 0 * 2^3 + 1 * 2^4 = 2 + 4 + 16 = 22 (decimal). Este tipo de numeracin resulta muy til cuando cada bit puede significar cosas diferentes para un ordenador. El sistema hexadecimal, que es el rey de los sistemas de numeracin, al menos en lo que respecta a los ordenadores. Usa 16 dgitos, los archiconocidos 0 a 9 y para los otros seis se usan las letras A, B, C, D, E y F, que tienen valores 10, 11, 12, 13, 14 y 15, respectivamente. Se usan indistintamente maysculas y minsculas. Por ejemplo, un nmero hexadecimal 4F3D: 13 * 16^0 + 3 * 16^1 + 15 * 16^2 + 4 * 16^3 = 13 + 3 * 16+ 15 * 256 + 4 * 4096 = 20285 Este sistema de numeracin tiene muchas ventajas: La conversin entre binario y hexadecimal es tan simple como en octal, la nica diferencia es que los bits se agrupan de cuatro en cuatro. 0000 es 0, 0001 es 1, 0010 es 2 1111 es F. El byte, es la unidad de memoria ms usada por los ordenadores y agrupa ocho bits. Para codificar un nmero de 8 bits slo se necesitan dos dgitos hexadecimales. El mayor nmero expresable por un byte, 11111111(binario), equivale a 255(decimal) y a FF(hexadecimal). Y para palabras de dos bytes (16 bits), se usan slo cuatro dgitos hexadecimales. (El nmero 16 aparece mucho cuando se habla de ordenadores.) Para 32 bits: 8 dgitos hexadecimales, y sucesivamente.

4.4 Operadores, Operandos y Expresiones


Los operadores pueden aparecer en las expresiones, e indican al compilador la realizacin de determinadas operaciones matemticas, lgicas y numricas. Se aplican a variables u otros objetos denominados operandos y su efecto es una combinacin de las siguientes acciones: Producir un resultado-valor Alterar un operando Designar un objeto o funcin.

Operadores aritmticos Existen dos tipos de operadores aritmticos: Los binarios: + * / % Suma Resta Multiplicacin Divisin Mdulo (resto)

31

Apuntes de Fundamentos de Programacin de Sistemas

y los unarios: ++ -Su sintaxis es: binarios: <variable1><operador><variable2> unarios: <variable><operador> y al revs, <operador><variable>. Incremento (suma 1) Decremento (resta 1) Cambio de signo

Operadores de asignacin

La mayora de los operadores aritmticos binarios explicados en el captulo anterior tienen su correspondiente operador de asignacin:
= += -= *= /= %= Asignacin simple Suma Resta Multiplicacin Divisin Mdulo (resto)

Con estos operadores se pueden escribir, de forma ms breve, expresiones del tipo: n=n+3 se puede escribir n+=3 k=k*(x-2) lo podemos sustituir por k*=x-2

Expresiones
Una expresin en un lenguaje de programacin es una combinacin de los valores, funciones, smbolo, tomos, y procedimientos, interpretados segn las reglas de la precedencia particulares y de la asociacin para un lenguaje de programacin particular, que computa y despus devuelve otro valor. Las expresiones pueden o pueden no tener efectos secundarios.

4.5 Prioridad Operadores en evaluacin de expresiones


Ser importante tener en cuenta la precedencia de los operadores a la hora de trabajar con ellos: () ++, - *, /, % +, Mayor precedencia Menor precendencia

Las operaciones con mayor precedencia se realizan antes que las de menor precedencia. Si en una operacin encontramos signos del mismo nivel de precedencia, dicha operacin se realiza de izquierda a derecha. A continuacin se muestra un ejemplo sobre ello:

32

Apuntes de Fundamentos de Programacin de Sistemas


a*b+c/d-e 1. a*b resultado = x 2. c/d resultado = y 3. x+y resultado = z 4. z-e Fijarse que la multiplicacin se resuelve antes que la divisin ya que est situada ms a la izquierda en la operacin. Lo mismo ocurre con la suma y la resta.

4.6 Estructura de un Programa


4.6.1 Estructura de un Programa en Java

ESTRUCTURA DE UN PROGRAMA EN JAVA: Todo programa en Java consta de una o ms clases, donde dentro de alguna de ellas debe existir un mtodo llamado main. El programa comienza a ejecutarse en el mtodo main, desde el cual es posible trabajar con otros mtodos, e incluso con otras clases. CLASES EN JAVA Las clases son el centro de la Programacin Orientada a Objetos.Algunos de los conceptos ms importantes de la POO son los siguientes: 1. ENCAPSULACIN. Las clases pueden ser declaradas como pblicas ( public) y como package (accesibles slo para otras clases del package). Las variables miembro y los mtodos pueden ser public, private, protected y package. De esta forma se puede controlar el acceso y evitar un uso inadecuado. 2. HERENCIA. Una clase puede derivar de otra (extends), y en ese caso hereda todas sus variables y mtodos. Una clase derivada puede aadir nuevas variables y mtodos y/o redefinir las variables y mtodos heredados. 3. POLIMORFISMO. Los objetos de distintas clases pertenecientes a una misma jerarqua o que en Java consta de una o ms clases, donde dentro de alguna de ellas debe existir al mismo implementan Todo una programa misma interface pueden tratarse de una forma general e individualizada, un mtodo llamado main. El programa comienza a ejecutarse en el mtodo main, desde el cual es tiempo. Esto posible facilita la programacin y elemantenimiento del cdigo. trabajar con otros mtodos, incluso con otras clases.
CLASES EN JAVA Las clases son el centro de la Programacin Orientada a Objetos (OOP - Object Oriented Programming). Algunos de los conceptos ms importantes de la POO son los siguientes: 1. Encapsulacin. Las clases pueden ser declaradas como pblicas ( public) y como package (accesibles slo para otras clases del package). Las variables miembro y los mtodos pueden ser public, private, protected y package. De esta forma se puede controlar el acceso y evitar un uso inadecuado. 2. Herencia. Una clase puede derivar de otra ( extends), y en ese caso hereda todas sus variables y mtodos. Una clase derivada puede aadir nuevas variables y mtodos y/o redefinir las variables y mtodos heredados. 3. Polimorfismo. Los objetos de distintas clases pertenecientes a una misma jerarqua o que implementan una misma interface pueden tratarse de una forma general e individualizada, al mismo tiempo. Esto facilita la programacin y el mantenimiento del cdigo. Recordando el Concepto de Clase

33

Apuntes de Fundamentos de Programacin de Sistemas


Una clase es una agrupacin de datos (variables o campos) y de funciones (mtodos) que operan sobre esos datos. La definicin de una clase se realiza en la siguiente forma: [public] class Classname { // definicin de variables y mtodos ... } donde la palabra public es opcional: si no se pone, la clase tiene la visibilidad por defecto, esto es, slo es visible para las dems clases del package. Todos los mtodos y variables deben ser definidos dentro del bloque {...} de la clase. Un objeto (en ingls, instance) es un ejemplar concreto de una clase. Las clases son como tipos de variables, mientras que los objetos son como variables concretas de un tipo determinado. Classname unObjeto; Classname otroObjeto; A continuacin se enumeran algunas caractersticas importantes de las clases:

CARACTERISTICAS IMPORTANTES DE LAS CLASES:


o o o o o Todas las variables y funciones de Java deben pertenecer a una clase. Si una clase deriva de otra (extends), hereda todas sus variables y mtodos. Java tiene una jerarqua de clases. Una clase slo puede heredar de una nica clase. En un fichero se pueden definir varias clases, pero en un fichero no puede haber ms que una clase public. a) Todas las variables y funciones de Java deben pertenecer a una clase. No hay variables y funciones globales. b) Si una clase deriva de otra (extends), hereda todas sus variables y mtodos. c) Java tiene una jerarqua de clases estndar de la que pueden derivar las clases que crean los usuarios. d) Una clase slo puede heredar de una nica clase (en Java no hay herencia mltiple). Si al definir una clase no se especifica de qu clase deriva, por defecto la clase deriva de Object. La clase Object es la base de toda la jerarqua de clases de Java. e) En un fichero se pueden definir varias clases, pero en un fichero no puede haber ms que una clase public. Este fichero se debe llamar como la clase public que contiene con extensin *.java. Con algunas excepciones, lo habitual es escribir una sola clase por fichero. f) Si una clase contenida en un fichero no es public, no es necesario que el fichero se llame como la clase.

g) Los mtodos de una clase pueden referirse de modo global al objeto de esa clase al que se aplican por medio de la referencia this. h) Las clases se pueden agrupar en packages, introduciendo una lnea al comienzo del fichero (package packageName;). Esta agrupacin en packages est relacionada con la jerarqua de directorios y ficheros en la que se guardan las clases.

34

Apuntes de Fundamentos de Programacin de Sistemas


Control de Acceso

CONTROL DE ACCESO : Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las variables de instancia y los mtodos definidos en la clase:
public: Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instacia pblicos. protected: Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de instancia protegidos. private: Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la clase. No son accesibles desde las subclases. friendly (sin declaracin especfica): Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia se declaran friendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo paquete, pero no por los externos al paquete. Es lo mismo que protected. Import Los paquetes de clases se cargan con la palabra clave import, especificando el nombre del paquete como ruta y nombre de clase

Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las variables de instancia y los mtodos definidos en la clase:
public: Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instacia pblicos. protected: Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de instancia protegidos. private: Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la clase. No son accesibles desde las subclases. friendly (sin declaracin especfica): Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia se declaran friendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo paquete, pero no por los externos al paquete. Es lo mismo que protected. Los mtodos protegidos (protected) pueden ser vistos por las clases derivadas, como en C++, y tambin, en Java, por los paquetes (packages). Todas las clases de un paquete pueden ver los mtodos protegidos de ese paquete. Para evitarlo, se deben declarar como private protected, lo que hace que ya funcione como en C++ en donde slo se puede acceder a las variables y mtodos protegidos de las clases derivadas. Una de las grandes fortalezas de Java es su rica coleccin de clases predefinidas, las cuales pueden reutilizar los programadores en lugar de programar las propias. Import Las diversas clases predefinidas se agrupan en categoras de clases relacionadas llamadas paquetes. A los paquetes se les conoce de manera colectiva como biblioteca de clases de Java o como la Interfaz de Programacin de Aplicaciones (API). Los paquetes de clases se cargan con la palabra clave import, especificando el nombre del paquete como ruta y nombre de clase (es lo mismo que #include de C/C++). Se pueden cargar varias clases utilizando un asterisco. import java.Date; import java.awt.*;

35

Apuntes de Fundamentos de Programacin de Sistemas


Cada porcin del nombre del paquete es un directorio o carpeta en el disco. Todos los paquetes en la API de java se almacenan en el directorio java o javax que contienen a su vez otros subdirectorios. Principales Paquetes de Java El lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un sistema de entrada/salida general, herramientas y comunicaciones. Los Principales paquetes Java que se incluyen son: java.applet: Este paquete contiene clases diseadas para usar con applets. Hay una clase Applet y tres interfaces: AppletContext, AppletStub y AudioClip. java.awt: El paquete Abstract Windowing Toolkit (awt) contiene clases para generar widgets y componentes GUI (Interfaz Grfico de Usuario). Incluye las clases Button, Checkbox, Choice, Component, Graphics, Menu, Panel, TextArea y TextField. java.io: El paquete de entrada/salida contiene las clases de acceso a ficheros: FileInputStream y FileOutputStream. java.lang: Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread, Exception, System, Integer, Float, Math, String, etc. java.net: Este paquete da soporte a las conexiones del protocolo TCP/IP y, adems, incluye las clases Socket, URL y URLConnection. java.util: Este paquete es una miscelnea de clases tiles para muchas cosas en programacin. Se incluyen, entre otras, Date (fecha), Dictionary (diccionario), Random (nmeros aleatorios) y Stack (pila FIFO). javax.swing: Contiene clases para manejar cajas de dialogo. A continuacin se presenta la estructura principal e un programa en Java import paquete1; import paquete2; public class PrimeraClase { public static void main(String[] args) { declaracin variables y/o objetos bloque de sentencias } }

Variables y Mtodos Estticos En un momento determinado se puede querer crear una clase en la que el valor de una variable de instancia sea el mismo (y de hecho sea la misma variable) para todos los objetos instanciados a partir de esa clase. Es decir, que exista una nica copia de la variable de instancia. Se usar para ello la palabra clave static. class Documento extends Pagina

36

Apuntes de Fundamentos de Programacin de Sistemas


{ static int version = 10; } El valor de la variable version ser el mismo para cualquier objeto instanciado de la clase Documento. Siempre que un objeto instanciado de Documento cambie la variable version, sta cambiar para todos los objetos. De la misma forma se puede declarar un mtodo como esttico, lo que evita que el mtodo pueda acceder a las variables de instancia no estticas: class Documento extends Pagina { static int version = 10; int numero_de_capitulos; static void annade_un_capitulo() { numero_de_capitulos++; // esto no funciona } static void modifica_version( int i ) { version++; // esto si funciona } } EJEMPLO DE DEFINICIN DE UNA CLASE La modificacin de la variable numero_de_capitulos no funciona porque se est violando una de // fichero Bicicleta.java las reglas de acceso al intentar acceder desde un mtodo esttico a una variable no esttica. public class Bicicleta Todas las clases que se derivan, cuando se declaran estticas, comparten la misma pgina de { variables; es decir, todos los objetos que se generen comparten la misma zona de memoria. Las public int cambios=6; funciones estticas se usan para acceder solamente a variables estticas. int numeroVelocidad; // private int velocidad; public void acelerar(int velocidad_actual) { velocidad+=velocidad_actual; } public void frenar(int velocidad_frenado) { velocidad-=velocidad_frenado; } public void cambiarVelocidad(int nuevaVelocidad) { numeroVelocidad=nuevaVelocidad; } public void imprimirEstado() { System.out.println("velocidad Actual---->"+velocidad); System.out.println("Cambio Actual----> "+numeroVelocidad); System.out.println("Numero de velocidades----> "+cambios); } Bicicleta(int numVelocidad,int velocidadInicial) // Constructor de la clase { numeroVelocidad=numVelocidad; velocidad=velocidadInicial; EJEMPLO DE DEFINICIN DE UNA CLASE } Bicicleta( ) // Sobrecarga del constr { numeroVelocidad=1; velocidad=0; }

37

Apuntes de Fundamentos de Programacin de Sistemas

// fichero Bicicleta.java public class Bicicleta { public int cambios=6; int numeroVelocidad; // private int velocidad; public void acelerar(int velocidad_actual) { velocidad+=velocidad_actual; } public void frenar(int velocidad_frenado) { velocidad-=velocidad_frenado; } public void cambiarVelocidad(int nuevaVelocidad) { numeroVelocidad=nuevaVelocidad; } public void imprimirEstado() { System.out.println("velocidad Actual---->"+velocidad); System.out.println("Cambio Actual----> "+numeroVelocidad); System.out.println("Numero de velocidades----> "+cambios); } Bicicleta(int numVelocidad,int velocidadInicial) // Constructor de la clase { numeroVelocidad=numVelocidad; velocidad=velocidadInicial; } Bicicleta( ) // Sobrecarga del constr { numeroVelocidad=1; velocidad=0; } } En este ejemplo se ve cmo se definen las variables miembro y los mtodos dentro de la clase. Dichas variables y mtodos pueden ser de objeto o de clase (static). Se puede ver tambin cmo el nombre del fichero coincide con el de la clase public con la extensin *.java. VARIABLES MIEMBRO A diferencia de la programacin algortmica clsica, que estaba centrada en las funciones, la programacin orientada a objetos est centrada en los datos. Una clase est constituida por unos datos y unos mtodos que operan sobre esos datos.

38

VARIABLES MIEMBRO:A diferencia de la programacin algortmica clsica, que estaba centrada en las funciones, la programacin orientada a objetos est centrada en los datos. Una clase est constituida por unos datos y unos Apuntes Fundamentos de Programacin de Sistemas mtodos que operan de sobre esos datos. VARIABLES MIEMBRO DE OBJETO :Cada objeto, es decir cada ejemplar concreto de la clase, tiene su propia copia de las variables miembro. Las variables miembro de una clase (tambin llamadas campos) pueden ser de tipos primitivos (boolean, int, long, double, ) o referencias a objetos de otra clase (composicin). VARIABLES MIEMBRO DE CLASE (STATIC). Una clase puede tener variables propias de la clase y no de cada objeto. A estas variables se les llama variables de clase o variables static. Las variables static se suelen utilizar para definir constantes comunes para todos los objetos de la clase. VARIABLES FINALES:Una variable de un tipo primitivo declarada como final no puede cambiar su valor a lo largo de la ejecucin del programa. Puede ser considerada como una constante, y equivale a la palabra const Variables miembro de objeto Cada objeto, es decir cada ejemplar concreto de la clase, tiene su propia copia de las variables miembro. Las variables miembro de una clase (tambin llamadas campos) pueden ser de tipos primitivos (boolean, int, long, double, ) o referencias a objetos de otra clase (composicin). Un aspecto muy importante del correcto funcionamiento de los programas es que no haya datos sin inicializar. Por eso las variables miembro de tipos primitivos se inicializan siempre de modo automtico, incluso antes de llamar al constructor (false para boolean, el carcter nulo para char y cero para los tipos numricos). De todas formas, lo ms adecuado es inicializarlas tambin en el constructor. Las variables miembro pueden tambin inicializarse explcitamente en la declaracin, como las variables locales, por medio de constantes o llamadas a mtodos (esta inicializacin no est permitida en C++). Por ejemplo, long nDatos = 100; Las variables miembro se inicializan en el mismo orden en que aparecen en el cdigo de la clase. Esto es importante porque unas variables pueden apoyarse en otras previamente definidas. Cada objeto que se crea de una clase tiene su propia copia de las variables miembro. Por ejemplo, cada objeto de la clase Circulo tiene sus propias coordenadas del centro x e y, y su propio valor del radio r. Los mtodos de objeto se aplican a un objeto concreto poniendo el nombre del objeto y luego el nombre del mtodo, separados por un punto. A este objeto se le llama argumento implcito. Por ejemplo, para calcular el rea de un objeto de la clase Circulo llamado c1 se escribir: c1.area();. Las variables miembro del argumento implcito se acceden directamente o precedidas por la palabra this y el operador punto. Las variables miembro pueden ir precedidas en su declaracin por uno de los modificadores de acceso: public, private, protected y package (que es el valor por defecto y puede omitirse). Junto con los modificadores de acceso de la clase ( public y package), determinan qu clases y mtodos van a tener permiso para utilizar la clase y sus mtodos y variables miembro. Variables miembro de clase (static) Una clase puede tener variables propias de la clase y no de cada objeto. A estas variables se les llama variables de clase o variables static. Las variables static se suelen utilizar para definir constantes comunes para todos los objetos de la clase (por ejemplo PI en la clase Circulo) o variables que slo tienen sentido para toda la clase (por ejemplo, un contador de objetos creados como numCirculos en la clase Circulo). Las variables de clase son lo ms parecido que Java tiene a las variables globales de C/C++. Las variables de clase se crean anteponiendo la palabra static a su declaracin. Para llamarlas se suele utilizar el nombre de la clase (no es imprescindible, pues se puede utilizar tambin el nombre de cualquier objeto), porque de esta forma su sentido queda ms claro. Por ejemplo, Circulo.numCirculos es una variable de clase que cuenta el nmero de crculos creados.

39

Apuntes de Fundamentos de Programacin de Sistemas

Si no se les da valor en la declaracin, las variables miembro static se inicializan con los valores por defecto para los tipos primitivos ( false para boolean, el carcter nulo para char y cero para los tipos numricos), y con null si es una referencia. Las variables miembro static se crean en el momento en que pueden ser necesarias: cuando se va a crear el primer objeto de la clase, en cuanto se llama a un mtodo static o en cuanto se utiliza una variable static de dicha clase. Lo importante es que las variables miembro static se inicializan siempre antes que cualquier objeto de la clase. VARIABLES FINALES Una variable de un tipo primitivo declarada como final no puede cambiar su valor a lo largo de la ejecucin del programa. Puede ser considerada como una constante, y equivale a la palabra const de C/C++. Java permite separar la definicin de la inicializacin de una variable final. La inicializacin puede hacerse ms tarde, en tiempo de ejecucin, llamando a mtodos o en funcin de otros datos. La variable final as definida es constante (no puede cambiar), pero no tiene por qu tener el mismo valor en todas las ejecuciones del programa, pues depende de cmo haya sido inicializada. Adems de las variables miembro, tambin las variables locales y los propios argumentos de un mtodo pueden ser declarados final. Declarar como final un objeto miembro de una clase hace constante la referencia, pero no el propio objeto, que puede ser modificado a travs de otra referencia. En Java no es posible hacer que un objeto sea constante. Visibilidad y vida de las variables Se entiende por visibilidad, mbito o scope de una variable, la parte de la aplicacin donde dicha variable es accesible y por lo tanto puede ser utilizada en una expresin. En Java todas las variables deben estar incluidas en una clase. En general las variables declaradas dentro de unas llaves {}, es decir dentro de un bloque, son visibles y existen dentro de estas llaves. Por ejemplo las variables declaradas al principio de una funcin existen mientras se ejecute la funcin; las variables declaradas dentro de un bloque if no sern vlidas al finalizar las sentencias correspondientes a dicho if y las variables miembro de una clase (es decir declaradas entre las llaves {} de la clase pero fuera de cualquier mtodo) son vlidas mientras existe el objeto de la clase. Las variables miembro de una clase declaradas como public son accesibles a travs de una referencia a un objeto de dicha clase utilizando el operador punto (.). Las variables miembro declaradas como private no son accesibles directamente desde otras clases. Las funciones miembro de una clase tienen acceso directo a todas las variables miembro de la clase sin necesidad de anteponer el nombre de un objeto de la clase. Sin embargo las funciones miembro de una clase B derivada de otra A, tienen acceso a todas las variables miembro de A declaradas como public o protected, pero no a las declaradas como private. Una clase derivada slo puede acceder directamente a las variables y funciones miembro de su clase base declaradas como public o protected. Otra caracterstica del lenguaje es que es posible declarar una variable dentro de un bloque con el mismo nombre que una variable miembro, pero no con el nombre de otra variable local que ya existiera. La variable declarada dentro del bloque oculta a la variable miembro en ese bloque. Para acceder a la variable miembro oculta ser preciso utilizar el operador this, en la forma this.varname. Uno de los aspectos ms importantes en la programacin orientada a objetos (OOP) es la forma en la cual son creados y eliminados los objetos. En Java la forma de crear nuevos objetos es

40

Apuntes de Fundamentos de Programacin de Sistemas


utilizando el operador new. Cuando se utiliza el operador new, la variable de tipo referencia guarda la posicin de memoria donde est almacenado este nuevo objeto. Para cada objeto se lleva cuenta de por cuntas variables de tipo referencia es apuntado. La eliminacin de los objetos la realiza el programa denominado garbage collector, quien automticamente libera o borra la memoria ocupada por un objeto cuando no existe ninguna referencia apuntando a ese objeto. Lo anterior significa que aunque una variable de tipo referencia deje de existir, el objeto al cual apunta no es eliminado si hay otras referencias apuntando a ese mismo objeto. 4.6.2 Comentarios A la hora de programar es conveniente aadir comentarios (cuantos ms mejor) para poder saber que funcin tiene cada parte del cdigo, en caso de que no lo utilicemos durante algn tiempo. Adems facilitaremos el trabajo a otros programadores que puedan utilizar nuestro archivo fuente. Para poner comentarios en un programa escrito en C usamos los smbolos /* y */ , o bien //: /* Este es un ejemplo de comentario */ /* Un comentario tambin puede estar escrito en varias lneas */ // Usando las diagonales // Para varias lneas se deben // incluir en cada una

Los comentarios no ser tenido en cuenta por el compilador.

4.7 Proceso Creacin de un Ejecutable


Programas traductores: Son los que traducen instrucciones de lenguajes de programacin de alto nivel al cdigo binario del lenguaje de la mquina. Ejemplos de programas traductores Compilador: Es un programa que traduce un lenguaje de alto nivel al lenguaje de mquina de una computadora. Segn va ejecutando la traduccin, coteja los errores hechos por el programador. Traduce un programa una sola vez, generalmente, y es cinco veces ms rpido que los programas intrpretes. Ejemplos: ALGOL, BASIC, COBOL, FORTRAN, PASCAL y PL/1.

Intrprete: Es un programa que traduce un lenguaje de alto nivel al lenguaje de mquina de una computadora. El programa siempre permanece en su forma original (programa fuente) y traduce cuando est en la fase de ejecucin instruccin por instruccin. Ejemplo: BASIC

Unidad 5 Implementacin de la Clase


5.1 Modificadores de Acceso
Los modificadores son elementos del lenguaje que se colocan delante de la definicin de variables locales, datos miembro, mtodos o clases y que alteran o condicionan el significado del elemento. Uno de los ms importantes es el modificador static que se usa para definir datos miembros o mtodos como pertenecientes a una clase, en lugar de pertenecer a una instancia.

41

Apuntes de Fundamentos de Programacin de Sistemas


En este captulo se presentan los modificadores de acceso, que son aquellos que permiten limitar o generalizar el acceso a los componentes de una clase o a la clase en si misma. Los modificadores de acceso permiten al diseador de una clase determinar quien accede a los datos y mtodos miembros de una clase. Los modificadores de acceso preceden a la declaracin de un elemento de la clase (ya sea dato o mtodo), de la siguiente forma: [modificadores] tipo_variable nombre; [modificadores] tipo_devuelto nombre_Metodo ( lista_Argumentos ); Existen los siguientes modificadores de acceso: public - Todo el mundo puede acceder al elemento. Si es un dato miembro, todo el mundo puede ver el elemento, es decir, usarlo y asignarlo. Si es un mtodo todo el mundo puede invocarlo. private - Slo se puede acceder al elemento desde mtodos de la clase, o slo puede invocarse el mtodo desde otro mtodo de la clase. protected - El campo o mtodo es visible en la clase en donde se define y en cualquiera de sus subclases.. sin modificador - Se puede acceder al elemento desde cualquier clase del package donde se define la clase.

Pueden utilizarse estos modificadores para cualquier tipo de miembros de la clase, incluidos los constructores (con lo que se puede limitar quien puede crear instancias de la clase).

[Modificador de acceso] Class Nombre_Clase { Declaracion de variables de clase y de instancia // ejemplo: static public int i; // Otro ejemplo char var=@; Declaracion de metodos de clase y de instancia } DONDE: Modificadores de acceso pueden ser: private o public Declaracin de Mtodos: [modificador de acceso] tipo_retorno nmbFuncion(tipo1 arg1,tipo2 arg2,) { Sentencias [return(tipo)]; }
EJEMPLO en Java: class numero { public int entero,s,r; public void sumar () {

42

Apuntes de Fundamentos de Programacin de Sistemas


s=entero+10; } public void resyar () { r=entero-5; } } Modificadores de acceso para clases Las clases en si mismas pueden declararse: public - Todo el mundo puede usar la clase. Se pueden crear instancias de esa clase, siempre y cuando alguno de sus constructores sea accesible. sin modificador - La clase puede ser usada e instanciada por clases dentro del package donde se define. Las clases no pueden declararse ni protected , ni private . Son importantes los modificadores de acceso? Los modificadores de acceso permiten al diseador de clases delimitar la frontera entre lo que es accesible para los usuarios de la clase, lo que es estrictamente privado y no importa a nadie ms que al diseador de la clase e incluso lo que podra llegar a importar a otros diseadores de clases que quisieran alterar, completar o especializar el comportamiento de la clase. Con el uso de estos modificadores se consigue uno de los principios bsicos de la Programacin Orientada a Objetos, que es la encapsulacin: Las clases tienen un comportamiento definido para quienes las usan conformado por los elementos que tienen un acceso pblico, y una implementacin oculta formada por los elementos privados, de la que no tienen que preocuparse los usuarios de la clase. Los otros dos modificadores, protected y el acceso por defecto (package) complementan a los otros dos. El primero es muy importante cuando se utilizan relaciones de herencia entre las clases y el segundo establece relaciones de confianza entre clases afines dentro del mismo package. As, la pertenencia de las clases a un mismo package es algo ms que una clasificacin de clases por cuestiones de orden. Cuando se disean clases, es importante pararse a pensar en trminos de quien debe tener acceso a que. Qu cosas son parte de la implantacin y deberan ocultarse (y en que grado) y que cosas forman parte de la interface y deberan ser pblicas.

5.2 Encapsulamiento de la Clase


Definicin previa: un paquete es una coleccin de clases que se encuentran en el mismo directorio. Las clases permiten implementar tipos de datos abstractos. El problema que se presenta es que desde cualquier clase se puede accesar los campos de un objeto perteneciente a otra clase. Esto es una violacin al principio de abstraccin que dice que un tipo de datos abstracto slo puede ser manipulado a travs de las operaciones que se definen para ste. Visibilidad de Campos y Mtodos En java al definir una clase se puede controlar la visibilidad que tendrn sus campos y mtodos al exterior de la clase. Este control se efecta de la siguiente forma:

43

Apuntes de Fundamentos de Programacin de Sistemas


class A { private int privx; protected int protb; public int pubc; int paqd; private void Met Priv?() { } protected void Met Prot?() { } public void Met Pub?(A a) { // Un campo siempre es visible // en la clase en donde se define privx a.privx protb a.protb pubc a.pubc // Un mtodo siempre es visible // en la clase en donde se define Met Priv(); a.Met Priv(); } void Met Paq? () { } } Las palabras private, protected y public son atributos de un campo o un mtodo y su significado es el siguiente: private: El campo o mtodo slo es visible dentro de la clase donde se define. protected: El campo o mtodo es visible en la clase en donde se define y en cualquiera de sus subclases. public: El campo o mtodo es visible en cualquier clase. Ninguna de las anteriores: El campo o mtodo es visible en cualquiera de las clases pertenecientes al paquete en donde se define. Ejemplo:

class B { public void Met B?() { A a= new A(); a.pubc= 1; // Ok a.priva= 2; // error, privado a.protb= 3; // error, B no es // subclase de A a.Met Pub(); // Ok a.Met Priv(); // error, privado } } Visibilidad de Clases: Al declarar una clase se puede especificar que es pblica usando el atributo public. De este modo la clase podr ser usada por cualquier otra clase. Si la clase no es pblica entonces la clase slo puede ser usada dentro del paquete que la contiene. public class Box extends Graph Obj { }

5.3 El Mtodo como Elemento de la Comunicacin

44

Apuntes de Fundamentos de Programacin de Sistemas


Podemos definir mtodo como un programa procedimental o procedural escrito en cualquier lenguaje, que est asociado a un objeto determinado y cuya ejecucin slo puede desencadenarse a travs de un mensaje recibido por ste o por sus descendientes. Son sinnimos de mtodo todos aquellos trminos que se han aplicado tradicionalmente a los programas, como procedimiento, funcin, rutina, etc. Sin embargo, es conveniente utilizar el trmino mtodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno de POO, que afectan fundamentalmente a la forma de invocarlo (nicamente a travs de un mensaje) y a su campo de accin, limitado a un objeto y a sus descendientes, aunque posiblemente no a todos. Si los mtodos son programas, se deduce que podran tener argumentos, o parmetros. Puesto que los mtodos pueden heredarse de unos objetos a otros, un objeto puede disponer de un mtodo de dos maneras diferentes: -Mtodos propios. Estn includos dentro de la cpsula del objeto. -Mtodos heredados. Estan definidos en un objeto diferente, antepasado de ste (padre,abuelo, etc.). A veces estos mtodos se llaman mtodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

5.3.1 Concepto de Parmetro

Concepto de parmetro: Un parametro es una variable que puede pasar su valor a un procedimiento desde el principal o
desde otro procedimiento. El Constructor Un constructor es una funcin especial que sirve para construir o inicializar objetos. El Destructor Un destructor es una funcin miembro con igual nombre que la clase, pero precedido por el carcter. Entrada y Salida de Datos Aqu slo trataremos la entrada/salida que se comunica con el usuario a travs de la pantalla o de la ventana del terminal. Los programas necesitan comunicarse con su entorno, tanto para recoger datos e informacin que deben procesar, tanto para devolver los resultados obtenidos. System.out.print() y System.out.println().Son los primeros mtodos que aprende cualquier programador. Sus caractersticas fundamentales son:Pueden imprimir valores escritos directamente en el Cdigo o cualquier tipo de variable Primitiva de Java. public class PrimerPrograma { public static void main(String[] args) Un parametro es una variable que puede pasar su valor a un procedimiento desde el principal o { desde otro procedimiento. Existen ocasiones en que es necesario mandar al procedimiento ciertos System.out.println (Hola, mundo); valores para(57); que los use en algn proceso. Estos valores que se pasan del cuerpo principal del System.out.println programa al procedimiento se llaman parmetros. double numeroPI=3.141592654; System.out.println (numeroPI); REGLAS PARA EL USO DE PARAMETROS String hola = new string(Hola); System.out.println (hola); 1. Cuando se usan variables como parmetros, la variable que se manda debe ser declarada } dentro del principal o del procedimiento de donde se esta enviando. } 2. La variable que se manda tiene un nombre, la que se recibe puede tener otro nombre. 3. La cantidad de variables que se envan deben ser igual en cantidad, orden y tipo a las variables que reciben. 4. La variable que recibe tiene un mbito local dentro del procedimiento, es decir solo la puede usar ese procedimiento. Y se pueden mandar datos, valores (excepto decimales), expresiones algebraicas, pero siempre se recibe en variables. 5.3.2 El Constructor Un constructor es una funcin especial que sirve para construir o inicializar objetos. En C++ la inicializacin de objetos no se puede realizar en el momento en que son declarados; sin embargo,

Estructuras Secuenciales y Selectivas

45

Apuntes de Fundamentos de Programacin de Sistemas


tiene una caracterstica muy importante y es disponer de una funcin llamada constructor que permite inicializar objetos en el momento en que se crean. Un constructor es una funcin que sirve para construir un nuevo objeto y asignar valores a sus miembros dato. Se caracteriza por: - Tener el mismo nombre de la clase que inicializa - Puede definirse inline o fuera de la declaracin de la clase - No devuelve valores - Puede admitir parmetros como cualquier otra funcin - Puede existir ms de un constructor, e incluso no existir Si no se define ningn constructor de una clase, el compilador generar un constructor por defecto. El constructor por defecto no tiene argumentos y simplemente sita ceros en cada byte de las variables instancia de un objeto. Si se definen constructores para una clase, el constructor por defecto no se genera. Un constructor del objeto se llama cuando se crea el objeto implcitamente: nunca se llama explcitamente a las funciones constructoras. Esto significa que se llama cuando se ejecuta la declaracin del objeto. Tambin, para objetos locales, el constructor se llama cada vez que la declaracin del objeto se encuentra. En objetos globales, el constructor se llama cuando se arranca el programa. El constructor por defecto es un constructor que no acepta argumentos. Se llama cuando se define una instancia pero no se especifica un valor inicial. Se pueden declarar en una clase constructores mltiples, mientras tomen parte diferentes tipos o nmero de argumentos. El compilador es entonces capaz de determinar automticamente a qu constructor llamar en cada caso, examinando los argumentos. Los argumentos por defecto se pueden especificar en la declaracin del constructor. Los miembros dato se inicializarn a esos valores por defecto, si ningn otro se especifica. 5.3.3 El Destructor Un destructor es una funcin miembro con igual nombre que la clase, pero precedido por el carcter ~. Una clase slo tiene una funcin destructor que, no tiene argumentos y no devuelve ningn tipo. Un destructor realiza la operacin opuesta de un constructor, limpiando el almacenamiento asignado a los objetos cuando se crean. C++ permite slo un destructor por clase. El compilador llama automticamente a un destructor del objeto cuando el objeto sale fuera del mbito. Si un destructor no se define en una clase, se crear por defecto un destructor que no hace nada. Normalmente los destructores se declaran public.

Unidad 6 Estructuras Secuenciales y Selectivas


6.1 Entrada y Salida de Datos
Aqu slo trataremos la entrada/salida que se comunica con el usuario a travs de la pantalla o de la ventana del terminal. Los programas necesitan comunicarse con su entorno, tanto para recoger datos e informacin que deben procesar, tanto para devolver los resultados obtenidos.

46

Apuntes de Fundamentos de Programacin de Sistemas


6.1.1 System.out.print() y System.out.println() Para imprimir en la pantalla se utilizan los mtodos System.out.print () y System.out.println (). Son los primeros mtodos que aprende cualquier programador. Sus caractersticas fundamentales son: Pueden imprimir valores escritos directamente en el Cdigo o cualquier tipo de variable Primitiva de Java. public class PrimerPrograma { public static void main(String[] args) { System.out.println (Hola, mundo); System.out.println (57); double numeroPI=3.141592654; System.out.println (numeroPI); String hola = new string(Hola); System.out.println (hola); } } se pueden imprimir varias variables en una llamada al mtodo correspondiente utilizando el operador + de concatenacin, que equivale a convertir a String todas las variables que no lo sean y concatenar las cadenas de caracteres (el primer argumento debe ser un String). System.out.println(Hola,mundo + numeroPI); Se debe recordar que los objetos System.out y System.err son de la clase printStream y aunque imprimen las variables de un modo legible, no permiten dar a la salida un formato a medida. El programador no puede especificar un formato distinto al disponible por defecto. 6.1.2 Lectura desde teclado Se necesita lo siguiente: Obtener un objeto que modele la fuente de entrada de datos "teclado" en un programa Java . Para ello, lo primero que debe tenerse presente es que el teclado es la entrada estndar de datos en un PC. A continuacin, debe tenerse en cuenta, que cualquier entrada genrica de datos a un programa Java, se modela mediante un objeto de la clase abstracta java.io.InputStream. Se observa que un objeto de esta clase es lo que devuelve la variable de campo esttica "in" de la clase java.lang.System. Adems, la explicacin API de esta variable nos dice que representa la entrada estndar de datos de un programa Java. Para la lectura desde el teclado nos auxiliamos de la clase Scanner que se encuentra incluida en el paquete java.util, por lo que es necesario importar para poder usar esta clase. Esta clase ofrece una serie de mtodos que, habiendo ledo un token, lo intentan interpretar como algn tipo primitivo de java: Mtodos para Datos Mtodos para Datos Reales Mtodos para Booleano Enteros

47

Apuntes de Fundamentos de Programacin de Sistemas


int Byte short Long nextInt() double nextByte() float nextShort() nextLong() nextDouble() nextFloat() boolean nextBoolean()

Por ltimo cabe mencionar el mtodo String nextLine(), que devuelve lo que queda por leer de la lnea actual; es decir, desde donde estemos hasta el primer fin de lnea. Llamadas consecutivas a nextLine() van proporcionando lneas sucesivas de texto. Un ejemplo de su uso sera: import java.util.Scanner; public class Lectura { public static void main(String[] args) { Scanner leer = new Scanner(System.in); System.out.print("Escriba dos nmeros: "); double x = leer.nextDouble(); double y = leer.nextDouble(); System.out.println("La suma es: " + (x + y)); } } Una probable salida al ejecutar el programa anterior sera: Escriba dos nmeros: 3,1416 2 La suma es: 5.1416 6.1.3 Entrada/Salida con cajas de Texto Con las instrucciones anteriores, todas las salidas se despliegan bajo el ambiente en el que se est trabajando (DOS o en su defecto NetBins), tambin se pueden generar las salidas utilizando ventanas o cuadros de dilogos, que viene implementados en modo grfico. Para poder trabajar con estas herramientas, se debe importar la clase JOptionPane del paquete javax.swing. Este paquete contiene varias clases que ayudan a los programadores a definir interfaces grficas de usuario (GUI). Los componentes GUI facilitan la entrada de datos por parte del usuario y dar formato o presentar la salida de datos por parte el usuario. Al utilizar cualquiera de estas herramientas es necesario concluir el programa con el mtodo Sytem.exit(0); Las opciones con las que contamos son: Generar una caja de dialogo que slo incluya un mensaje. JOptionPane.showMessageDialog(null,"Cadena_de_salida"); Donde Cadena_de_salida, es lo que se desplegar en la caja de dilogo.

48

Apuntes de Fundamentos de Programacin de Sistemas

Aqu podemos ver el cdigo que lo crea y lo muestra: JOptionPane.showMessageDialog(frame, "Eggs aren't supposed to be green.");

Caractersticas de JOptionPane
Utilizando JOptionPane, se pueden crear muchos dilogos. Aqu podemos ver unos ejemplos, todos producidos por DialogDemo.

49

Apuntes de Fundamentos de Programacin de Sistemas


El siguiente cdigo, tomado de DialogDemo.java, crea dos dilogos Yes/No. El primer dilogo utiliza las palabras del aspecto y comportamiento para los dos botones. El segundo dilogo personaliza las palabras. Con la excepcin del cambio de palabras, los dilogos son idnticos. Para personalizar las palabras, el cdigo que crea el segundo dilogo utiliza showOptionDialog, en vez de showConfirmDialog.

...//create the yes/no dialog: int n = JOptionPane.showConfirmDialog( frame, "Would you like green eggs and ham?", "An Inane Question", JOptionPane.YES_NO_OPTION); if (n == JOptionPane.YES_OPTION) { setLabel("Ewww!"); } else if (n == JOptionPane.NO_OPTION) { setLabel("Me neither!"); } else { setLabel("Come on -- tell me!"); }

...//create the yes/no (but in other words) dialog: String string1 = "Yes, please"; String string2 = "No way!"; Object[] options = {string1, string2}; int n = JOptionPane.showOptionDialog(frame, "Would you like green eggs and ham?", "A Silly Question", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, //don't use a custom Icon options, //the titles of buttons string1); //the title of the default button if (n == JOptionPane.YES_OPTION)

50

Apuntes de Fundamentos de Programacin de Sistemas


{ setLabel("You're kidding!"); } else if (n == JOptionPane.NO_OPTION) { setLabel("I don't like them, either."); } else { setLabel("Come on -- 'fess up!"); }

Como podramos observar en los ejemplos anteriores, JOptionPane proporciona soporte para mostrar dilogos estndards, proporcionando iconos, especficando el ttulo y el texto del dilogo, y personalizando el texto del botn. Otras caractersticas permiten personalizar los componentes del dilogo a mostrar y especificar si el dilogo debera aparecer en la pantalla. Incluso se puede especificar qu panel de opciones se pone a s mismo dentro de un frame interno (JInternalFrame) en lugar de un JDialog. Cuando se crea un JOptionPane, el cdigo especfico del aspecto y comportamiento aade componentes al JOptionPane y determina la distribucin de dichos componentes. La siguiente figura muestra cmo los aspectos y comportamientos ms comunes distribuyen un JOptionPane:

icono (si existe)

Mensaje Botones

Para la mayora de los dilogos modales sencillos, se crea y se muestra el dilogo utilizando uno de los mtodos showXxxDialog de JOptionsPane. Para ejemplos de utilizacin de los siguientes mtodos. showMessageDialog

51

Apuntes de Fundamentos de Programacin de Sistemas


Muestra un dilogo modal con un botn, etiquetado "OK". Se puede especificar fcilmente el mensaje, el icono y el ttulo que mostrar el dilogo. showConfirmDialog Muestra un dilogo modal con dos botones, etiquetados "Yes" y "No". Estas etiquetas no son siempre terriblemente descriptivas con las actiones especficas del programa que causan. showInputDialog Muestra un dilogo modal que obtiene una cadena del usuario. Un dilogo de entrada muestra un campo de texto para que el usuario teclee en l, o un ComboBox no editable, desde el que el usuario puede elegir una de entre varias cadenas. El valor capturado se le asigna a un objeto de tipo String, ejemplo: showOptionDialog Muestra un dilogo modal con los botones, los iconos, el mensaje y el ttulo especificado, etc. Con este mtodo, podemos cambiar el texto que aparece en los botones de los dilogos estndard. Tambin podemos realizar cualquier tipo de personalizacin. El soporte de iconos de JOptionPane permite especificar qu icono mostrar el dilogo. Podemos utilizar un icono personalizado, no utilizar ninguno, o utilizar uno de los cuatro iconos estndard de JOptionPane (question, information, warning, y error). Generar una caja de dialogo que incluya un mensaje y acepte como entrada una cadena de caracteres. Ejemplo: import javax.swing.JOptionPane; public class Dos { public static void main(String[] args) { int E; byte B; short S; String Cadena,Nombre; Nombre=JOptionPane.showInputDialog("Cual es tu nombre???? "); JOptionPane.showMessageDialog(null,"Bienvenido"+Nombre); Cadena=JOptionPane.showInputDialog("Teclea entero"); E=Integer.parseInt(Cadena); Cadena=JOptionPane.showInputDialog("Teclea Byte"); B=Byte.parseByte(Cadena); Cadena=JOptionPane.showInputDialog("Teclea dato Short"); S=Short.parseShort(Cadena); JOptionPane.showMessageDialog(null,"Hola "+Nombre+" los resultados son: \nEntero= "+E+"\nByte= "+B+"\n Short= "+S); System.exit(0); } }

6.2 Estructura Secuencial


La estructura secuencial es aquella en la que una accin (instruccin) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente hasta el fin del proceso.

52

Apuntes de Fundamentos de Programacin de Sistemas

En Pseudocdigo una Estructura Secuencial se representa de la siguiente forma:

Observe el siguiente problema de tipo cotidiano y sus respectivos algoritmos representados en Pseudocdigo y en diagramas de flujos: Tengo un telfono y necesito llamar a alguien pero no s como hacerlo.

6.3 Estructuras Selectivas


Este tipo de sentencias permiten variar el flujo del programa en base a unas determinadas condiciones. Operadores Relacionales

53

Apuntes de Fundamentos de Programacin de Sistemas

Los operadores relacionales se utilizan para comparar el contenido de dos variables, donde el resultado ser verdadero (un valor diferente de cero) o falso (valor igual a cero). E seis operadores relacionales bsicos: > < >= <= == != Mayor que Menor que Mayor o igual que Menor o igual que Igual que Distinto que

El resultado que devuelven estos operadores es valor diferente de cero para Verdadero y 0 para Falso. Si hay ms de un operador se evalan de izquierda a derecha. Adems los operadores == y != estn por debajo del resto en cuanto al orden de precedencia. Operadores Lgicos Los operadores lgicos bsicos son: && || ! AND OR NOT (El valor contrario)

Estos operadores actan sobre expresiones lgicas. Permiten unir expresiones lgicas simples formando otras ms complejas. 6.3.1 Estructura if

Sintaxis: if (condicin) sentencia; La sentencia solo se ejecuta si se cumple la condicin. En caso contrario el programa sigue su curso sin ejecutar la sentencia.
Otro formato: if (condicin) sentencia1; else sentencia2;
Nos sirve para evaluar si una condicin simple o compuesta es verdadera (distinta de cero) o falsa (igual a cero). Para ello utilizaremos dos tipos de formatos. El primero es: if (expresin) sentencia 1; else sentencia 2; Y el segundo es: if (expresin) { sentencias; } else { sentencias; }

54

Apuntes de Fundamentos de Programacin de Sistemas


Los dos formatos se pueden combinar. Si la expresin es falsa y no ha puesto else, el programa seguir su secuencia normal. Los if tambin pueden ir anidados en cuyo caso cada else ir asociado al ltimo if evaluado.

Existe la posibilidad de utilizar llaves para ejecutar ms de una sentencia dentro de la misma condicin. 6.3.2 Estructura switch Esta estructura se suele utilizar en los mens, de manera que segn la opcin seleccionada se ejecuten una serie de sentencias. Su sintaxis es: switch (variable){ case contenido_variable1: sentencias; break; case contenido_variable2: sentencias; break; default: sentencias; } Cada case puede incluir una o ms sentencias sin necesidad de ir entre llaves, ya que se ejecutan todas hasta que se encuentra la sentencia break. La variable evaluada slo puede ser de tipo entero o caracter. default ejecutar las sentencias que incluya, en caso de que la opcin escogida no exista. Suponiendo que x es un dato entero: switch (x) { case 1: case 2: case 3: System.out.println ( Invierno); break; case 4: case 5: case 6: System.out.println ( Primavera); break; case 7: case 8: case 9: System.out.println (Verano); break; case 10: case 11: case 12: System.out.println (Otoo); break; default: System.out.println (Error al introducir el nmero de mes);

55

Apuntes de Fundamentos de Programacin de Sistemas


} } Los switch tambin se pueden anidar en cuyo caso se coloca el nuevo switch como tratamiento de una orden case. switch (expresin) { case 1: switch (expresin 2) { case 1: Sentencias; break; case 2: Sentencias; break; } break; case 2: Sentencias; break; }

Unidad 7 Estructuras de Repeticin


Las estructuras de repeticin son las que permiten ejecutar partes del cdigo de forma repetida mientras se cumpla una condicin. Esta condicin puede ser simple o compuesta de otras condiciones unidas por operadores lgicos. 7.1 Sentencia while Su sintaxis es: while (condicin) sentencia; Con esta sentencia se controla la condicin antes de entrar en el bucle. Si sta no se cumple, el programa no entrar en el bucle. Naturalmente, si en el interior del bucle hay ms de una sentencia, stas debern ir entre llaves para que se ejecuten como un bloque.
EJEMPLOS: INTRODUCIR UN NMERO POR TECLADO Y HALLAR SU CUBO. EL PROGRAMA FINALIZA CUANDO SE INTRODUCE 1 int x = 0, r; while (x! = -1) { System.out.println( Introduce un nmero:); x =in.nextInt();; R = x * x * x; System.out.println( Su cubo es: +r);

56

Apuntes de Fundamentos de Programacin de Sistemas


}

7.2 Sentencia do...while Su sintaxis es:


do { sentencia1; sentencia2; }while (condicin); Con esta sentencia se controla la condicin al final del bucle. Si sta se cumple, el programa vuelve a ejecutar las sentencias del bucle. La nica diferencia entre las sentencias while y do...while es que con la segunda el cuerpo del bucle se ejecutar por lo menos una vez.
EJEMPLO: int a; do { System.out.println( Introduce un nmero:); a =in.nextInt(); If (a > 0) System.out.println( El nmero es mayor que cero); If (a < 0) System.out.println( El nmero es menor que cero); } while (a! = 0);

7.3 Sentencia for Su sintaxis es: for (inicializacin;condicin;incremento) { sentencia1; sentencia2; } La inicializacin indica una variable (variable de control) que condiciona la repeticin del bucle. Si hay ms, van separadas por comas: for (a=1,b=100;a!=b;a++,b- -) { sentencias; } Lo primero que hace es inicializar la/s variable/s; a continuacin se evala la condicin planteada, si es verdadera se ejecuta la/s sentencia/s que forman el bucle y finalmente se realiza el incremento. Este proceso se repetir hasta que deje de cumplirse. Si la condicin es falsa la primera vez el bucle no se ejecutar. Existe la posibilidad de inicializar ms de una variable, de utilizar condiciones compuestas, de realizar ms de una operacin en el incremento e incluso existe la posibilidad de omitir algunos de los parmetros. Si se realiza ms de una operacin en alguno de estos parmetros se separan por comas y si se omite un parmetro se deja vaco.

57

Apuntes de Fundamentos de Programacin de Sistemas


EJEMPLOS: for (int x = 1; x < 101; x++) { System.out.println(x+\n); } EJEMPLO: Imprime una tabla de multiplicar import java.util.Scanner; public class Tabla /* Escribe la tabla de multiplicar */ { public static void main(String[] args) { Scanner in = new Scanner(System.in); int num,x,result; System.out.println("Introduce un nmero:;); num=in.nextInt(); for (x=0;x<=10;x++) { result=num*x; System.out.println(num+" por +x+ igual +result+\n); } if(entero==0) System.out.println("El numero es cero "); else System.out.println("El numero es diferente decero "); } } 7.4 Sentencia break Esta sentencia se utiliza para terminar la ejecucin de un bucle o salir de una sentencia switch. 7.5 Sentencia continue Se utiliza dentro de un bucle. Cuando el programa llega a una sentencia continue no ejecuta las lneas de cdigo que hay a continuacin y salta a la siguiente iteracin del bucle.

58

S-ar putea să vă placă și