Fundamentos SISTEMAS 23 08 2011

74
Apuntes de Fundamentos de Programación de Sistemas Fundamentos De Programación Unidad 1 Conceptos básicos del modelo orientado a objetos 1.1 Paradigmas de Programación 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 interacción entre ellos 1.4 La Abstracción 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 Análisis Orientado a Objetos 1.6.3 Diseño Orientado a Objetos 1.6.4 Programación Orientada Objetos, Conceptos y Características 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 Técnicas Básicas de Modelado de Objetos 2.1 Definición de Clases, Atributos, Métodos y Objetos 2.2 El Modelo como resultado de la Abstracción 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 Análisis 2.5.1 Descubrir Objetos en el Dominio del Problema 2.5.2 Identificar Atributos de los Objetos 2.5.3 Identificar Métodos en los Objetos Unidad 3 Técnicas de diseño detallado 3.1 Diseño Algorítmico 3.1.1 Elementos y Reglas para la Representación de Algoritmos 3.2 Diseño Algorítmico de Funciones Unidad 4 Introducción a Programación 4.1 Clasificación Del Software 4.1.1 Software Del Sistema 4.1.2 Software De Aplicación 1

Transcript of Fundamentos SISTEMAS 23 08 2011

Apuntes de Fundamentos de Programación de Sistemas

Fundamentos De Programación Unidad 1 Conceptos básicos del modelo orientado a objetos 1.1 Paradigmas de Programación1.2 Beneficios del Modelo de Objetos y de la Poo sobre otrosParadigmas1.3 Reconocimiento de Objetos y Clases en el mundo real y lainteracción entre ellos 1.4 La Abstracción 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 Análisis Orientado a Objetos 1.6.3 Diseño Orientado a Objetos 1.6.4 Programación Orientada Objetos, Conceptos yCaracterísticas

1.7 Elementos Primordiales en el Modelo de Objetos 1.7.1 Encapsulamiento de Objetos1.7.2 Modularidad de Objetos1.7.3 Herencia y Polimorfismo

Unidad 2 Técnicas Básicas de Modelado de Objetos 2.1 Definición de Clases, Atributos, Métodos y Objetos 2.2 El Modelo como resultado de la Abstracción 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 Análisis 2.5.1 Descubrir Objetos en el Dominio del Problema 2.5.2 Identificar Atributos de los Objetos 2.5.3 Identificar Métodos en los Objetos

Unidad 3 Técnicas de diseño detallado 3.1 Diseño Algorítmico

3.1.1 Elementos y Reglas para la Representación de Algoritmos 3.2 Diseño Algorítmico de Funciones

Unidad 4 Introducción a Programación 4.1 Clasificación Del Software

4.1.1 Software Del Sistema 4.1.2 Software De Aplicación

1

Apuntes de Fundamentos de Programación de Sistemas

4.2 Conceptos de la Programación 4.2.1 Definición de Programa 4.2.2 Definición de Programación 4.2.3 Definición Lenguajes de Programación

4.3 Datos Definición 4.3.1 Tipos de Datos 4.3.2 Identificadores 4.3.3 Sistema de Numeración Binaria y Hexadecimal

4.4 Operadores Operandos y Expresiones 4.5 Prioridad Operadores en evaluación de expresiones 4.6 Estructura Básica de un Programa 4.7 Proceso Creación de un Ejecutable

Unidad 5 Implementación de la Clase 5.1 Modificadores de Acceso 5.2 Encapsulamiento de la Clase 5.3 El Método como Elemento de la Comunicación

5.3.1 Concepto de Parámetro 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 Secuencial6.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 Múltiple(switch) 6.3.5 Selectiva Intenta( try/catch)

Unidad 7 Estructuras de Repetición 7.1 Repetir Mientras (Selectiva simple si) 7.2 Repetir Hasta 7.3 Repetir Desde

2

Apuntes de Fundamentos de Programación de Sistemas

FUENTES DE INFORMACIÓN

CAMELIA MUÑOZ CARO/ALFONSO NIÑO RAMOS/AURORA VIZCAÍNO BARCELÓINTRODUCCIÓN A LA PROGRAMACIÓN CON ORIENTACIÓN A OBJETOSPRENTICE HALL

OSVALDO CAIRÓMETODOLOGÍA DE LA PROGRAMACIÓNAlgoritmos, diagramas de flujo y programasALFAOMEGA

GREG PERRYAPRENDIENDO PRINCIPIOS DE PROGRAMACIÓN EN 24 HORASED. PRENTICE may

ANTHONY SINTESAPRENDIENDO PROGRAMACIÓN ORIENTADA A OBJETOS EN 21 LECCIONES AVANZADASED. PREARSON EDUCACIÓN, MÉXICO 2002

TIMOTHY BUDDINTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOSED. ADDISON-WESLEY IBEROAMERICANA, USA 1994

GRADY BOOCH/ADDISON-WESLEY/DIAZ DE SANTOSANÁLISIS Y DISEÑO ORIENTADO A OBJETOS CON APLICACIONESSEGUNDA EDICIÓN, MÉXICO 1994ED. ADDISON-WESLEY

JAMES MARTÍN/JAMES J. ODELLANÁLISIS Y DISEÑO ORIENTADO A OBJETOS

3

Apuntes de Fundamentos de Programación de Sistemas

ED. PRENTICE HISPANO-AMERICANA

ANDREW C. STAUGGARD JR.TECNICAS ESTRUCTURADAS Y ORIENTADA A OBJETOSED. PRENTICE HISPANO-AMERICANA

MICHAEL BLAHA/WILLIAM PREMERLANI/FRED HEDÍ/WILLIAM LORENSENPROGRAMACIÓN ORIENTADA A OBJETOS. CONCEPTOS, MODELADO, DISEÑO Y CODIFICACÓN EN C++ED PRENTICE may, MADRID ESPAÑA 1996

Unidad 1 Conceptos Básicos del Modelo Orientado aObjetos

1.1 Paradigmas de Programación

El propósito de un programador profesional es construir productos quesatisfagan al máximo las necesidades de sus clientes. Sin embargo,construir un programa no trivial es una tarea compleja y a vecesatemorizante. Escribir instrucciones con una cierta sintaxis sólo es unaetapa de este proceso. Otras etapas importantes son el análisis delproblema que se desea resolver, el diseño del programa, la documentación,las pruebas y el mantenimiento. Un buen balance entre todas estas parteshacen de un programa un producto confiable. Actualmente existen muchastécnicas para construir esos productos, cada una con sus ventajas ydesventajas. En este documento se dará un vistazo general de latecnología orientada a objetos para la construcción de software de altacalidad. Los aspectos principales de un software de calidad son:

4

Apuntes de Fundamentos de Programación de Sistemas

(1) Robustez(2) Confiabilidad

(3) Eficiencia

(4) Claridad

(5) Mantenimiento a bajo costo.

La mayoría de los programadores alguna vez han escuchado hablar o hanusado alguna de las siguientes formas de programación:

Programación Lineal. Programación Estructurada. Programación Modular. Programación Orientada a Objetos.

En las siguientes secciones se discute brevemente en que consiste cadauna de estas técnicas resaltando las ventajas y desventajas respecto alas otras.

1.1.1 Programación Lineal

Usualmente, cualquier programador empieza escribiendo programas pequeñosy simples, los cuales consisten de una parte principal. En este caso el''programa principal'' consiste de una secuencia de comandos odeclaraciones que modifican datos globales a través de todo el programa.Lo anterior se ilustra en la siguiente figura:

Figura 1.1: Paradigma de programaciónlineal.

Esta es la manera tradicional en que un principiante se inicia comoprogramador y ni tiene mayor dificultad. Por otro lado, es bien conocidoque esta forma de programación tiene tremendas desventajas una vez que elprograma es lo suficientemente grande. Por ejemplo, si la misma secuenciade declaraciones se necesita en lugares diferentes del programa, entoncesdicha secuencia debe ser copiada en cada lugar donde haga falta. Lo

5

Apuntes de Fundamentos de Programación de Sistemas

anterior generó la idea de extraer secuencias y ponerlas en algún''lugar'' desde donde sea posible ejecutarlas para luego regresar alprograma principal. El ''lugar'' se conoce como subrutina, procedimiento ofunción, dependiendo del lenguaje, y es la base de la programaciónestructurada.

1.1.2 Programación Estructurada

En la programación estructurada se pueden conjuntar secuencias dedeclaraciones e instrucciones en un mismo lugar, las que después puedenser usadas por el programa principal desde cualquier punto. La secuenciase conoce como subrutina, procedimiento o función dependiendo del lenguaje quese trate. Se dice que se hace una llamada para invocar al procedimiento.Después de que la secuencia es procesada, el control de flujo regresa alprograma principal justo después de donde se hizo la llamada, véase lafigura 1.2.

El paradigma original de este tipo de programación es:

Buscar los procedimientos que se desean;

usar los mejores algoritmos existentes.

Figura 1.2: Paradigma deprogramación estructurada.

La inclusión de procedimientos hace a los programas estructurados y conmenos posibilidad de errores. Por ejemplo, si unprocedimiento es correcto, cada vez que sea ejecutadoproducirá, en principio, resultados correctos. Por el

6

Apuntes de Fundamentos de Programación de Sistemas

contrario, en caso de que el procedimiento contenga errores,se puede agilizar la búsqueda de éstos últimos y repararlosrápidamente. Un programa puede verse como una secuencia dellamadas a procedimientos. El programa principal es elresponsable 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 estamanera, el control de flujo de datos puede ser ilustrado comouna gráfica jerárquica como se muestra en la siguientefigura.

Figura 1.3: Control de flujo en laprogramación estructurada.

En resumen, la programación estructurada, consiste en dividir un programaen pequeñas piezas llamadas procedimientos y cada procedimiento esejecutado o llamado por el programa principal desde diferentes lugares deéste para resolver un problema. La programación estructurada resuelvealgunos problemas que se tienen con la programación lineal.

1.1.3 Programación Orientada a Objetos

En la POO, la estructura es organizada por los datos. Primero seseleccionan las representaciones de los datos que mejor cumplen con losrequerimientos, y luego se decide que hacer con ellas, que es justo locontrario a la programación modular. La abstracción de datos esfundamental para un buen diseño. La POO resuelve la mayoría de losproblemas mencionados en las secciones anteriores. En contraste con otrastécnicas, ahora se va a interactuar con objetos cada uno manteniendosu propio estado, ver figura 1.5.

7

Apuntes de Fundamentos de Programación de Sistemas

Figura 1.5: Paradigma de programaciónorientada a objetos.

Podría decirse que cada objeto implementa su propio módulo permitiendocoexistir a varios objetos del mismo tipo. Cada objeto es responsable desu inicialización y destrucción.

Pero esto no es todo. En la POO existen más conceptos y técnicas queayudan al programador a ordenar sus ideas y, consecuentemente, aconstruir software más manejable con un tiempo de vida mayor que usandootras técnicas.

El paradigma de la programación orientada a objetos es:

Buscar las clases que se desean;

Proveer de un conjunto completo de operacionespara cada clase;

especializar usando herencia.

En general, si un algoritmo puede ser expresado independientemente de lostipos de datos y si éste puede hacerse sin contorsiones lógicas, elalgoritmo debería ser codificado de esta manera para que sea lo másgeneral posible. Esta es la idea detrás de la programación genérica.

Solamente algunos lenguajes permiten hacer programación genérica, C++ esuno de ellos (a través del uso de templates). La biblioteca estándar(STL) de C++ está construida bajo esta metodología.

1.2 Relación entre la Programación Orientada a Objetos y la ProgramaciónEstructurada

8

Apuntes de Fundamentos de Programación de Sistemas

La POO aporta un enfoque nuevo, convirtiendo la estructura de datos en elcentro sobre el que pivotan las operaciones. De esta forma, cualquiermodificación de la estructura de datos tiene efecto inmediato sobre lasacciones a realizar sobre ella, siendo ésta una de la diferenciasradicales respecto a la programación estructurada.

Una de las bases de esta escuela de programación parte del diseño arriba– abajo (programación estructurada). En esta forma de diseño sedescomponen los requerimientos del programa paso a paso, hasta llegar aun nivel que permite expresarlos mediante procedimientos y funciones. LaPOO estructura los datos en objetos que pueden almacenar, manipular ycombinar información.

En resumen, la programación estructurada presta atención al conjunto deacciones que manipulan el flujo de datos (desde la situación inicial a lafinal), mientras que la programación orientada a objetos presta atencióna la interrelación que existe entre los datos y las acciones a realizarcon ellos.

Muchos habrán oído comentarios sobre la incidencia de la POO sobre laprogramación convencional. Se ha llegado a decir que el cambiointroducido por la POO es similar al producido por la aparición delensamblador sobre el código de máquina.

La POO proporciona las siguientes ventajas sobre otros lenguajes deprogramación:

Uniformidad. Ya que la representación de los objetos lleva implícitotanto el análisis como el diseño y la codificación de los mismos.

Comprensión. Tanto los datos que componen los objetos, como losprocedimientos que los manipulan, están agrupados en clases, que secorresponden con las estructuras de información que el programa trata.

Flexibilidad. Al tener relacionados los procedimientos que manipulan losdatos con los datos a tratar, cualquier cambio que se realice sobre ellosquedará reflejado automáticamente en cualquier lugar donde estos datosaparezcan.

Estabilidad. Dado que permite un tratamiento diferenciado de aquellosobjetos que permanecen constantes en el tiempo sobre aquellos que cambiancon frecuencia permite aislar las partes del programa que permaneceninalterables en el tiempo.

Reusabilidad. La noción de objeto permite que programas que traten lasmismas estructuras de información reutilicen las definiciones de objetosempleadas en otros programas e incluso los procedimientos que los

9

Apuntes de Fundamentos de Programación de Sistemas

manipulan. De esta forma, el desarrollo de un programa puede llegar a seruna simple combinación de objetos ya definidos donde estos estánrelacionados de una manera particular.

Uno de los puntos clave a remarcar en esta unidad es que la programaciónorientada a objetos no sustituye a ninguna metodología ni lenguaje deprogramación anterior. Todos los programas que se realizan utilizando unametodología de Diseño Orientado a Objetos (DOO) se pueden realizarigualmente mediante programación estructurada. Su uso en la actualidad sejustifica porque el desarrollo de todas las nuevas herramientas basadasen una internase de usuario gráfico como Windows, OS/2, x-Windows, etc.

1.3 Reconocimiento de Objetos y Clases en el mundo real y lainteracción entre ellos

Las personas nos formamos conceptos desde temprana edad. Cada concepto esuna idea particular o una comprensión de nuestro mundo. Los conceptosadquiridos 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 podría ser real o abstracto, como los ejemplos siguientes:

Una factura. Una organización.

Una figura.

Una pantalla.

Un plano de ingeniería.

Un componente de un plano de ingeniería.

Un ícono en una pantalla.

Un objeto puede estar compuesto por otros objetos. Estos últimos, a suvez, pueden estar compuestos de objetos.

Agrupación de un conjunto de objetos de similares características.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.

10

Apuntes de Fundamentos de Programación de Sistemas

Métodos: Andar, Parar, Girar, etc.

Un sistema real está formado por varios tipos de objetos (clases), queinteractúan entre sí, colaborando y pasándose información deunos a otros.

1.4 La Abstracción y el encapsulamiento como un proceso natural

Programación y Abstracción

En general un programa no es mas que una descripción abstracta de unprocedimiento o fenómeno que existe o sucede en el mundo real. Losmecanismos utilizados por los programadores para controlar lacomplejidad; entre todos ellos se destaca la abstracción.

Los humanos hemos desarrollado una técnica excepcionalmente potente paratratar la complejidad: abstraernos de ella. Incapaces de dominar en sutotalidad los objetos complejos, se ignoran los detalles no esenciales,tratando en su lugar con el modelo ideal de objeto y centrándonos en elestudio de sus aspectos esenciales.” [Wulft] Programación y AbstracciónAbstracción: Es la capacidad para encapsular y aislar la información deldiseño y ejecución.

Abstracción: Es la caracterización de un objeto de acuerdo a laspropiedades que nos interesen en un instante de tiempo.

Las características escogidas son relativas a la perspectiva delobservador.

Figura 1.6: Abstracción

11

Apuntes de Fundamentos de Programación de Sistemas

Encapsulamiento de Objetos

Encapsulación: Es la manera de ocultar los detalles de la representacióninterna de un objeto presentando solo la interface para el usuario (verfigura 1.7).

Figura 1.7: Encapsulación.

El encapsulamiento es una característica de la programación orientada aobjetos. Cada objeto está aislado del exterior, es un módulo natural, yla aplicación entera se reduce a un agregado o rompecabezas de objetos.El aislamiento protege a los datos asociados a un objeto contra sumodificación por quien no tenga derecho a acceder a ellos, eliminandoefectos secundarios e interacciones.

Resumiendo, la separación de los datos de las operaciones, y larestricción de que sólo es posible tener acceso a los datos a través delas operaciones definidas en la interfaz, permite seleccionar los TDAapropiados para resolver un problema determinado.

Los TDA proveen una visión abstracta para describir propiedades de unconjunto de entidades y su uso es independiente del lenguaje deprogramación. Por esta razón, se introduce una notación que consiste dedos partes:

Datos o Atributos: En esta parte se describen las estructuras de losdatos usados dentro del TDA de manera informal. Operaciones o Métodos: En esta parte se describen las operaciones queserán válidas para el TDA. Un conjunto de estas operaciones serán lainterfaz del TDA. Para cada operación se deben describir los argumentos,así como sus posibles precondiciones y postcondiciones.

12

Apuntes de Fundamentos de Programación de Sistemas

Los TDA permiten la creación de instancias con propiedades ycomportamientos bien definidos. En la POO los TDA's se conocen como clases.Una clase define las propiedades de los objetos los cuales son entidadestangibles en el ambiente de orientación a objetos.

Los TDA's definen su funcionalidad poniendo énfasis en los datos, laestructura, las operaciones y en los axiomas y precondiciones.Consecuentemente, POO es ''programar con TDA's'' (y algo más). Instancias(objetos) de TDA's (clases) se crean dinámicamente, se usan y sedestruyen con el objetivo de resolver un problema real mediante la POO.

1.5 La Poo y la Complejidad del Software

La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real queotros tipos de programación.

Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.

1.6 Conceptos del Ciclo de Vida del Software

Las fases del ciclo de vida del software son: concepción, elaboración,construcción y transición. La concepción es definir el alcance delproyecto y definir el caso de uso. La elaboración es proyectar un plan,definir las características y cimentar la arquitectura. La construcciónes crear el producto y la transición es transferir el producto a sususuarios [Booch 1998].

La solución de un problema por computadora, requiere de siete pasos,dispuestos de tal forma que cada uno es dependiente de los anteriores, locual indica que se trata de un proceso complementario y por lo tanto cadapaso exige el mismo cuidado en su elaboración. Los siete pasos de lametodología son los siguientes:

1. Definición del problema 2. Análisis de la solución3. Diseño de la solución4. Codificación5. Prueba y Depuración6. Documentación7. Mantenimiento

13

Apuntes de Fundamentos de Programación de Sistemas

1.6.1 Definición del problema

Es el enunciado del problema, el cual debe ser claro y completo. Esfundamental conocer y delimitar por completo el problema, saber que es lose desea realice la computadora, mientras esto no se conozca del todo, notiene caso continuar con el siguiente paso.

1.6.2 Análisis de la solución

Consiste en establecer una serie de preguntas acerca de lo que estableceel problema, para poder determinar si se cuenta con los elementossuficientes para llevar a cabo la solución del mismo, algunas preguntasson:

¿Con qué cuento?

Cuáles son los datos con los que se va a iniciar el proceso, qué tenemosque proporcionarle a la computadora y si los datos con los que cuento sonsuficientes para dar solución al problema.

¿Qué hago con esos datos?

Una vez que tenemos todos los datos que necesitamos, debemos determinarque hacer con ellos, es decir que fórmula, cálculos, que proceso otransformación deben seguir los datos para convertirse en resultados.

¿Qué se espera obtener?

Que información deseamos obtener con el proceso de datos y de que formapresentarla; en caso de la información obtenida no sea la deseadareplantear nuevamente un análisis en los puntos anteriores.Es recomendable que nos pongamos en el lugar de la computadora yanalicemos que es lo que necesitamos que nos ordenen y en que secuenciapara producir los resultados esperados.

1.6.3 Diseño de la solución

Una vez definido y analizado el problema, se procede a la creación delalgoritmo (Diagrama de flujo ó pseudocódigo), en el cual se da la seriede pasos ordenados que nos proporcione un método explícito para lasolución del problema.

Es recomendable la realización de pruebas de escritorio al algoritmodiseñado, para determinar su confiabilidad y detectar los errores que sepueden presentar en ciertas situaciones. Estas pruebas consisten en darvalores a la variable e ir probando el algoritmo paso a paso para obteneruna solución y si ésta es satisfactoria continuar con el siguiente paso

14

Apuntes de Fundamentos de Programación de Sistemas

de la metodología; de no ser así y de existir errores deben corregirse yvolver a hacer las pruebas de escritorio al algoritmo.

1.6.4 Codificación

Consiste en escribir la solución del problema (de acuerdo alpseudocódigo); en una serie de instrucciones detalladas en un códigoreconocible por la computadora; es decir en un lenguaje de programación(ya sea de bajo o alto nivel), a esta serie de instrucciones se le conocecomo PROGRAMA.

1.6.5 Prueba y Depuración

Prueba es el proceso de identificar los errores que se presenten durantela ejecución del programa; es conveniente que cuando se pruebe unprograma se tomen en cuenta los siguientes puntos:

1. Tratar de iniciar la prueba con una mentalidad saboteadora, casidisfrutando la tarea de encontrar un error.

2. Sospechar de todos los resultados que arroje la solución, con locual se deberán verificar todos.

3. Considerar todas las situaciones posibles, normales y aún lasanormales.

La Depuración consiste en eliminar los errores que se hayan detectadodurante la prueba, para dar paso a una solución adecuada y sin errores.

1.6.6 Documentación

Es la guía o comunicación escrita que sirve como ayuda para usar unprograma, o facilitar futuras modificaciones.

A menudo un programa escrito por una persona es usado por muchas otras,por ello la documentación es muy importante; ésta debe presentarse entres formas: EXTERNA, INTERNA y AL USUARIO FINAL.

Documentación Interna

Consiste en los comentarios o mensajes que se agregan al código delprograma, que explican las funciones que realizan ciertos procesos,cálculos o fórmulas para el entendimiento del mismo.

Documentación Externa

15

Apuntes de Fundamentos de Programación de Sistemas

También conocida como Manual Técnico, está integrada por los siguienteselementos: Descripción del Problema, Nombre del Autor, Diagrama del Flujoy/o Pseudocódigo, Lista de variables y constantes, y Codificación delPrograma, esto con la finalidad de permitir su posterior adecuación a loscambios.

Manual del Usuario

Es la documentación que se le proporciona al usuario final, es una guíaque indica el usuario como navegar en el programa, presentando todas laspantallas y menús que se va a encontrar y una explicación de los mismos,no contiene información de tipo técnico.

1.6.7 Mantenimiento

Se lleva a cabo después de determinado el programa, cuando se ha estadotrabajando un tiempo, y se detecta que es necesario hacer un cambio,ajuste y/o complementación al programa para que siga trabajando de maneracorrecta. Para realizar esta función, el programa debe estar debida mentedocumentado, lo cual facilitará la tarea.

1.7 Elementos Primordiales en el Modelo de Objetos

La programación Orientada a Objetos trata de cumplir las necesidades delos usuarios finales, estás tareas se realizan mediante la modelizacióndel mundo real, el soporte fundamental es el modelo objeto. Los elementos más importantes de este modelo son:

Abstracción Encapsulamiento Modularidad Jerarquía y Herencia Polimorfismo

Abstracción: Significa extraer las propiedades esenciales de unobjeto que lo distinguen de los demás tipos de Objetos y proporcionafronteras conceptuales definidas respecto al punto de vista delobservador. Es la capacidad para encapsular y aislar la información dediseño y ejecución.

La abstracción es uno de los medios más importantes, mediante el cual nosenfrentamos con la complejidad inherente al software. La abstracción esla propiedad que permite representar las características esenciales de unobjeto, sin preocuparse de las restantes características (no esenciales).Abstracción es la técnica de quitarle a una idea o a un objeto todos losacompañamientos innecesarios hasta que los deja en una forma esencial y

16

Apuntes de Fundamentos de Programación de Sistemas

mínima. Una buena abstracción elimina todos los detalles poco importantesy le permite enfocarse y concentrarse en los detalles importantes.

Una abstracción se centra en la vista externa de un objeto, de modo quesirva para separar el comportamiento esencial de un objeto de suimplementación. Definir una abstracción significa describir una entidaddel mundo real, no importa lo compleja que pueda ser y, a continuación,utilizar esta descripción en un programa.

El elemento clave de la programación orientada a objetos es la clase. Unaclase se puede definir como una descripción abstracta de un grupo deobjetos, cada uno de los cuales se diferencia por su estado específico ypor la posibilidad de realizar una serie de operaciones. Por ejemplo, unapluma estilográfica es un objeto que tiene un estado (llena de tinta ovacía) y sobre la cual se pueden realizar algunas operaciones (escribir,poner o quitar la tapa, llenar de tinta si está vacía, etc.).

La idea de escribir programas definiendo una serie de abstracciones no esnueva, pero el uso de clases para gestionar dichas abstracciones enlenguajes de programación ha facilitado considerablemente su aplicación.

Los lenguajes orientados a objetos proporcionan la Encapsulación. Laencapsulación se puede utilizar para aplicar el concepto de Abstracción.

Tipos de Datos Abstractos

Algunos autores describen a la POO como programación con Tipos de DatosAbstractos (TDA) y sus relaciones. Aunque el concepto de Abstracción es muyimportante dentro de la POO, esta última consiste de más herramientas.

1.7.1 Modularidad de Objetos

La Modularidad es la propiedad que permite subdividir una aplicaciónen partes más pequeñas (llamadas módulos), cada una de las cuales debeser tan independiente como sea posible de la aplicación en sí y de lasrestantes partes.

La modularización consiste en dividir un programa en módulos que sepuedan compilar por separado, pero que tienen conexiones con otrosmódulos. Al igual que la encapsulación, los lenguajes soportan laModularidad de diversas formas.

La Modularidad es la propiedad de un sistema que permite sudescomposición en un conjunto de módulos cohesivos y débilmenteacoplados. Por supuesto no todos los módulos son iguales: tomar unprograma monolítico y separarlo de forma aleatoria en archivos no es

17

Apuntes de Fundamentos de Programación de Sistemas

óptimo. Se debe tener en cuenta los conceptos asociados de dependencia,acoplamiento, cohesión, interfaz, encapsulación y abstracción. Una vezidentificado lo que es un buen módulo, se puede contemplar lareutilización de un buen módulo como componente.

El Módulo A depende del Módulo B si cualquier cambio en el Módulo Bimplica que el Módulo A también tenga que ser modificado. A veces se diceque el Módulo A es un cliente del Módulo B, o que el Módulo B actúa comoservidor del Módulo A. En general, es normal que un mismo módulo seatanto 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 lapropagación de los atributos y las operaciones a través de distintas sub-clases definidas a partir de una clase común.

Introduce, por tanto, una posibilidad de refinamiento sucesivo delconcepto de clase. Nos permite definir una clase principal y , a travésde sucesivas aproximaciones, cualquier característica de los objetos. Apartir de ahora definiremos como sub-clases todas aquellas clasesobtenidas mediante refinamiento de una (o varias) clases principales.

La herencia nos permite crear estructuras jerárquicas de clases donde esposible la creación de sub-clases que incluyan nuevas propiedades yatributos. Estas sub-clases admiten la definición de nuevos atributos,así como crear, modificar o inhabilitar propiedades.Para pensarlo de manera más fácil podemos abstraernos al siguienteejemplo.

Pensemos en los distintos sub-modelos asociados a un modelo básico deautomóvil. A partir de este modelo básico, los fabricantes introducendistintas características (aire acondicionado, ABS, distintastapicerías , acabados, etc.) que crean sub–clases. Todas estas sub-clasestienen en común la estructura básica (chasis , dirección , etc.) o varíansólo en algunos de sus componentes.Asociemos a este tipo básico una clase cuyos atributos representen laspiezas que componen el coche. Las sub-clases aportarán sus propiosatributos (en el caso de vehículos con aire acondicionado, todos aquellaspiezas que lo componen), permitiendo la definición de todos los posiblesmodelos.

18

Apuntes de Fundamentos de Programación de Sistemas

Además, es posible que una sub-clase herede atributos y propiedades demás de una clase. Este proceso se denomina herencia múltiple y lo veremoscon más detalle en capítulos posteriores.La herencia es, sin duda alguna, una de las propiedades más importantesde la OOP, ya que permite, a través de la definición de una clase básica,ir añadiendo propiedades a medida que sean necesarias y, además, en elsub-conjunto de objetos que sea preciso.La herencia permite que los objetos pueden compartir datos ycomportamientos a través de las diferentes sub-clases, sin incurrir enredundancia. Más importante que el ahorro de código, es la claridad queaporta al identificar que las distintas operaciones sobre los objetos sonen realidad una misma cosa.

1.7.2.2 Polimorfismo

El polimorfismo es una nueva característica aportada por la OOP. Estapropiedad indica la posibilidad de definir varias operaciones con elmismo nombre, diferenciándolas únicamente en los parámetros de entrada.Dependiendo del objeto que se introduzca como parámetro de entrada, seelegirá automáticamente cual de las operaciones se va a realizar.

Ya está habituado al operador <<suma>> que está presente en todos loslenguajes de programación. Sin embargo, los operadores <<suma defracciones>> y <<suma de números complejos>> no existen en casi ningúnlenguaje de programación.

Los lenguajes OOP permiten definir un operador <<suma>> tal que reconozcaque tipo de objeto se le está aplicando, a través de operaciones deobjetos. Previamente deberá definir la fracción y el número complejo comouna clase y la operación suma como una operación de una clase.

19

Apuntes de Fundamentos de Programación de Sistemas

Definiendo adecuadamente las operaciones suma de fracciones y suma denúmeros imaginarios, el operador suma devolverá, en el caso que losoperandos sean fracciones, una fracción y , en el caso de los númerosimaginarios, otros número imaginario.

Es posible extender el concepto e incluso definir operaciones como sumade bases de datos

El operador suma de base de datos. Aunque a primera vista la expresión C=A+B, siendo A y B bases de datos, nos pudiera parecer una extraordinariasimplificación, nos conduce a la pregunta:

¿Qué es la suma de una base de datos?

Consideremos varias posibilidades:

Introducción de registros: Lo que exige que A y B tengan la mismaestructura.

Unión de campos: Aquellos campos que aparezcan en B pero no en A seránañadidos 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 definición de un operador sobre un tipo complejode datos, intentando utilizar identificadores de operadores de datossimples, puede tener resultados impredecibles.

Una de las ventajas más importantes, sin entrar en la redefinición deoperadores es permitir la realización de las clases que definen un

20

Apuntes de Fundamentos de Programación de Sistemas

programa de forma totalmente independiente al programa donde se utilizan.Gracias a la encapsulación y el polimorfismo, aunque se utilicen losmismos nombre con las operaciones en dos clases distintas, el programareconoce a que clase se aplica durante la ejecución.

Como se podrá observar el polimorfismo y la encapsulación de datos estáníntimamente ligados y nos permiten un mayor grado de mantenibilidad yreusabilidad que los lenguajes tradicionales. Ésta es precisamente una delas causas de la revolución que ha supuesto la introducción de loslenguajes orientados a objetos dentro de la programación.

Conclusión.Identidad, clasificación, polimorfismo y herencia caracterizan a loslenguajes orientados a objetos. Cada uno de estos conceptos puedeutilizarse aisladamente, incluso aparecen en otras metodologías deprogramación, pero juntos se complementan en una relación sinérgica. Losbeneficios de la programación orientada a objetos son más que los quepueden verse a simple vista. El énfasis en las propiedades esenciales deun objeto, fuerza al desarrollador a pensar cuidadosamente que es unobjeto y que es lo que hace con el resultado de que el sistema esnormalmente más preciso, general y robusto que si pusiéramos el énfasisen los procedimientos y los datos por separado.

Capítulo 2. Técnicas Básicas de Modelado de Objetos

2.1 Definición de Clases Atributos Métodos y Objetos

Una clase es una representación de un TDA. Esta provee los detalles de laimplementación de los datos y de las operaciones. De manera formal sepuede decir que: Una clase es la implementación de un tipo de datosabstracto (TDA) y define los atributos y los métodos de la TDA.

Las instancias de clases se conocen como objetos. Entonces las clasesdefinen las propiedades de un conjunto de objetos.

CLASE: Agrupación de un conjunto de objetos de similares características.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. Métodos: Andar, Parar, Girar, etc.

21

Apuntes de Fundamentos de Programación de Sistemas

Un sistema real está formado por varios tipos de objetos (clases),que interactúan entre sí, colaborando y pasándose informaciónde unos a otros.

Objetos: Como se mencionó antes, los objetos son instancias de clases ycada objeto se diferencía de otros similares por su nombre particular(identidad). Es posible entonces, tener dos objetos con los mismos datospero distinto nombre. Esto es similar a lo que sucede con los lenguajestradicionales de programación donde se puede tener, por ejemplo, dosenteros “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 instantedeterminado, se conoce como el estado del objeto.

El estado del objeto cambia de acuerdo a los métodos que se aplican sobreél. La posible secuencia de cambios de estado se conoce como elcomportamiento del objeto:

Comportamiento: El comportamiento de un objeto está definido por elconjunto de métodos que se pueden aplicar sobre él.

Un objeto puede ser cualquier cosa, real o abstracta, acerca de la cualse almacenan datos y las funciones que manejan y controlan estos datos.

Ejemplo de Objetos: coche, bicicleta, empleado, vector, ...

Ejemplo de No Objetos: color, tamaño, edad, ...

Se tienen hasta ahora dos conceptos importantes de la orientación aobjetos, clases y objetos. Podría decirse que la POO es la acción deimplementar clases y crear instancias de ellas. En la ejecución de unprograma OO, las instancias de clases, los objetos, realizan ciertasacciones para obtener la solución de un problema cambiando.Consecuentemente, se puede pensar al programa en ejecución como unacolección de objetos en interacción. La pregunta inmediata es: ¿Cómo esque estos objetos interactúan?. La respuesta es: por medio de intercambiode mensajes.

Ejemplo: CLASE: Coche

Atributos: Color, Velocidad, Carburante. Métodos: Andar, Parar, Girar.

22

Apuntes de Fundamentos de Programación de Sistemas

Nombre de objeto 1: Coche FernandoFunciones permitidas objeto 1: Andar, Parar, Girar Datos objeto 1: gris, 140 Km/h, súper 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 ejecución, es un conjunto de objetos que son creados entiempos de ejecución, interactúan entre sí y finalmente se destruyencuando ya no son necesarios. Esta interacción se basa en el envío demensajes entre objetos. Un mensaje es enviado a un objeto para pedirle querealice una cierta acción sobre sus datos.

El envío de mensajes en la POO es similar a la llamada a procedimientos osubrutinas de las técnicas estructuradas. Sin embargo, en la POO existenobjetos autónomos que se comunican unos con otros por medio del envío demensajes. Los objetos reaccionan cuando reciben algún mensaje de otroobjeto y realizan una acción sobre sus datos. Existe también laposibilidad de que el objeto receptor niegue la ejecución de un métodopor medio de diferentes niveles de acceso.

Un mensaje es una petición a un objeto para la invocación de uno de susmétodos. Un mensaje contiene

el nombre del método, los argumentos del método.

Entonces, la invocación de un método de un objeto es la reacción causadapor la recepción de un mensaje. Un método se puede definir como:

Método: Un método está asociado con una clase y es aquí donde se definenlas operaciones que se llevarán a cabo sobre los datos. En otraspalabras, un método define el comportamiento de los objetos. Un objetoinvoca métodos como una reacción a la recepción de un mensaje.

2.2 El Modelo como resultado de la Abstracción

El primer problema que enfrenta un programador cuando inicia un proyectogrande de programación, es el problema mismo que se quiere resolver ycomo hacer abstracciones de este último. Típicamente, se enfrenta conproblemas de la ''vida real'' y se quiere hacer la vida más fácilconstruyendo un programa que resuelva el problema de manera automática.Sin embargo, los problemas de la vida real son muchas veces obscuros ydifíciles de entender. Entonces, es necesario dejar de lado los detallesde la implementación y tratar de obtener una visión abstracta, o un modelo,

23

Apuntes de Fundamentos de Programación de Sistemas

del problema. Este proceso de modelado es conocido como abstracción y seilustra en la figura 2.1.

Figura 2.1 Modelo

El modelo define una visión abstracta del problema. Esto implica que elmodelo se enfoca en la definición de las propiedades del problema. Estaspropiedades incluyen:

Las estructuras de datos que serán afectadas y modificadas Las operaciones identificadas por el problema.

Una abstracción es entonces, la estructuración de un problema de la vidareal en entidades bien definidas por sus datos y sus operaciones. Por lotanto, estas entidades combinan datos y operaciones y no estándesacopladas.

Una entidad con las propiedades descritas antes se conoce como un tipo dedatos abstracto o TDA. La figura 2.2 muestra un TDA. Sólo algunas operacionesson visibles desde el exterior y definen la interfaz de el TDA.

Figura 2.2: Tipo de Datos Abstracto.

24

Apuntes de Fundamentos de Programación de Sistemas

El ocultamiento de los datos de el TDA y sólo proveer de una interfazbien definida se conoce como encapsulación.

2.3 El UML como una Herramienta de Modelado de Objetos

El lenguaje UML (en inglés, Unified Modeling Language) es un lenguajepara la especificación, visualización, construcción y documentación delas partes de un sistema de software. Consiste en una colección de lasmejores prácticas de ingeniería que mostraron ser exitosas en elmodelamiento de sistemas complejos, a tal punto que muchas empresas estánactualmente incorporando UML para el desarrollo de sus productos. Fuécreado en 1996, por el Object Mangement Group1 con sucesivasmodificaciones y agregados para permitir mayor funcionalidad, gracias alaporte y la participación de empresas como IBM, Hewlett Packard,Microsoft, Unisys y Oracle, entre otras.

UML es un lenguaje predominantemente visual, que consiste de variosdiagramas, cada uno modelando un parte esencial del sistema a construir.La especificación completa de UML incluye doce diagramas, divididos entres categorías. Cuatro diagramas son utilizados para representar laestructura estática de la aplicación en desarrollo, cinco diagramasrepresentan diferentes aspectos del comportamiento dinámico y tresrepresentan la forma en que se organizan los módulos de la aplicación.

Nos centraremos aquí únicamente en el Diagrama de Clases, el cual nospermite diseñar la estructura del programa en función de las clases quelo componen.

2.3.1 DIAGRAMAS DE CLASES

Las clases son dibujadas con un rectángulo, dividido en tres partes: elnombre de la clase, los atributos, y las operaciones correspondientes.Puede agregarse también una división en donde se especifican lasresponsabilidades de esa clase.

NombreAtributosOperacionesResponsabilidades

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 características de losobjetos. Poseen un tipo, que nos indica qué clase de atributo es. Sibien existen ciertos tipos primitivos, como enteros, booleanos y reales,

25

Apuntes de Fundamentos de Programación de Sistemas

cualquier tipo puede ser usado, incluso otras clases. Larestricción más importante es que los atributos son visibles únicamente por laclase que los contiene.

Operaciones: Las operaciones son utilizadas para manipular losatributos o realizar consultas.

A diferencia de los atributos, las operaciones pueden tener diferentevisibilidad hacia otras clases.

Responsabilidades: Las responsabilidades son las obligaciones deuna clase y son definidas por el usuario. Si bien existe uncompartimiento dentro de la clase para la especificación de lasresponsabilidades, éstas son de carácter opcional.

Ejemplo:

Puntox: entero;y: enteroPunto(x,y:entero)mover(dist_x,dist_y:entero)distancia(P:Punto):realRepresenta un punto en el plano

Dependiendo del nivel de detalle que queramos alcanzar en el modelo, sepueden obviar algunas de las divisiones del gráfico de clases. Estopermite simplificar el diagrama completo, de acuerdo al nivel deabstracción necesario. Puede utilizarse, por ejemplo:

Notas: A los gráficos de clases se les puede agregar notas o comentariossobre algún aspecto interesante de la clase. Estas notas pueden incluirobservaciones sobre la clase, alguna restricción de uso, e incluso elpseudo-código de algunas operaciones. Se grafican por medio de unrectángulo con la esquina superior derecha plegada, como si fuera una

26

Apuntes de Fundamentos de Programación de Sistemas

hoja, y se une con una línea al elemento de la clase al cual correspondela nota.

En este ejemplo se agrega un comentario sobre la operación distancia. Másadelante veremos cómo especificar a través de notas el códigocorrespondiente a una operación de la clase.

2.3.2 DIAGRAMAS DE OBJETOS

Hasta ahora, sólo hemos mostrado clases en el modelo del sistema. Losobjetos pueden modelarse también en un diagrama de objetos. Este diagramautiliza la misma notación y relaciones que el diagrama de clases, puesto quelos objetos son simplemente instancias de esas mismas clases. Mientras eldiagrama de clases muestra las diferentes clases y sus relaciones, eldiagrama de objetos muestra instancias específicas de estas clases, y losvínculos entre estas instancias en un momento dado.

Los objetos son mostrados como las clases, pero con el nombre del objetosubrayado y precedido del nombre de la clase que representa.

La sintaxis correspondiente es:<nombre del objeto>:<clase>

Por ejemplo, utilizando el diagrama de las clases Auto y Motor, unainstancia particular de estasclases puede ser:

2.3.3 ESPECIFICACIÓN DE LAS OPERACIONES.

En las notas que se agregan al diagrama de clases podemos explicitar laimplementación de una o más operaciones de la clase. Para elloutilizaremos la siguiente convención:

27

Apuntes de Fundamentos de Programación de Sistemas

En las notas también explicitamos los invariantes de clase. En este caso, lanota va unida por un vínculo al rectángulo que representa la clase.

El lenguaje que utilizaremos para la especificación de las operaciones esel Lenguaje de Diseño de Algoritmos, (sentencias de asignación con,condicionales "si..entonces..si no...", ciclos "repetir..hasta" y "repetir mientras..",sentencia case, etc) con algunas operaciones especiales que se detallan acontinuación.

2.4.1 Analizar el enunciado del Problema

El análisis comienza con la definición de un problema generada porclientes y, posiblemente, por los desarrolladores. El análisis hace quesea más precisa y expone las ambigüedades e incongruencias y no deberíatomarse como inmutable, sino que tiene que servir como base para refinarlos requisitos reales. El analista debe ser para los requisitosverdaderos de las decisiones del diseño y de implementación disfrazada derequisitos y atacar a estos pseudorequisitos, porque restringen laflexibilidad. El propósito del análisis subsiguiente es comprender en sutotalidad el problema y sus implicaciones.

2.4.2 Identificar funciones del Sistema

28

Apuntes de Fundamentos de Programación de Sistemas

Consiste en describir por escrito a nivel técnico los procedimientosrelacionados con el programa y su modo de uso. También se debe documentarel programa para que sea más entendible.

¿Para quiénes son la documentación? - Usuarios (Digitadores) - Operadores- -Programadores - Analistas de sistemas

Documentos que se elaboran: Manual de Usuario y Manual del Analista. Alos usuarios se les elabora un manual de referencia para que aprendan autilizar el programa. Esto se hace a través de capacitaciones y revisiónde la documentación del manual de usuario. El manual del usuario no estáescrito a nivel técnico sino al de los distintos usuarios previstos yexplica en detalle cómo usar el programa: descripción de las tareas querealiza el programa, instrucciones necesarias para su instalación puestaen marcha y funcionamiento, recomendaciones de uso, menús de opciones,método de entrada y salida de datos, mensajes de error, recuperación deerrores, etc. A los operadores por si se presentan mensajes de error,sepan cómo responder a ellos. Además que se encargan de darle soportetécnico al programa.

A los programadores a través del manual del analista para que recuerdenaspectos de la elaboración del programa o en caso que otras personaspuedan actualizarlo o modificarlo (darle mantenimiento) y no sonnecesariamente las personas que lo diseñaron. Es por ello, que ladocumentación debe contener algoritmos y flujogramas de los diferentesmódulos que lo constituyen y las relaciones que se establecen entreellos; listados del programa, corridas, descripción de variables que seemplean en cada módulo, cuáles son comunes a diferentes módulos y cuáleslocales; descripción de los ficheros de cada módulo y todo lo que sea deimportancia para un programador.

2.5 Análisis

2.5.1 Descubrir Objetos en el Dominio del Problema

29

Apuntes de Fundamentos de Programación de Sistemas

Si se observa alrededor en una habitación, existen un conjunto deobjetos físicos que pueden ser fácilmente identificados, clasificados ydefinidos (en términos de atributos y operaciones). Pero cuando se“observa” el espacio de un problema en una aplicación de software, losobjetos pueden ser más difíciles de identificar. Se puede empezar aidentificar objetos examinando el planteamiento del problema o realizandoun “análisis sintáctico gramatical” en la narrativa del sistema que se vaa construir. Los objetos se determinan subrayando cada nombre o cláusulanominal e introduciéndola en una tabla simple. Los sinónimos debendestacarse. Si se requiere del objeto que implemente una solución,entonces éste formará parte del espacio de solución; en caso de que elobjeto se necesite solamente para describir una solución, éste formaparte del espacio del problema.

Los objetos se manifiestan de alguna de las formas siguientes:

Entidades Externas que producen o consumen información a usar porun sistema computacional. Por ejemplo: otros sistemas,dispositivos, personas.

Cosas que son parte del dominio de información del problema. Porejemplo: informes, presentaciones, cartas, señales.

Ocurrencias o Sucesos que ocurren dentro del contexto de unaoperación del sistema. Por ejemplo: una transferencia de propiedado la terminación de una serie de movimientos en un robot.

Papeles o Roles desempeñados por personas que interactúan con elsistema. Por ejemplo: director, ingeniero, vendedor.

Unidades Organizacionales que son relevantes en una aplicación. Porejemplo: división, grupo, equipo.

Lugares que establecen el contexto del problema y la funcióngeneral del sistema. Por ejemplo: planta de producción o muelle decarga.

Estructuras que definen una clase de objetos o, en casos extremos,clases relacionadas de objetos. Por ejemplo: sensores, vehículos decuatro ruedas o computadoras.

2.5.2 Identificar Atributos de los Objetos

Los atributos describen un objeto que ha sido seleccionado para serincluido en el modelo de análisis. En esencia, son los atributos los que

30

Apuntes de Fundamentos de Programación de Sistemas

definen al objeto, los que clarifican lo que representa el objeto en elcontexto del espacio del problema. Por ejemplo, si se tratara deconstruir un sistema de estadísticas para jugadores profesionales debéisbol, los atributos del objeto Jugador serían muy diferentes de losatributos del mismo objeto cuando se use dentro del contexto de unsistema de pensiones para jugadores profesionales. En el primero,atributos tales como nombre, posición, promedio de bateo, porcentaje deestancia en el campo de juego, años jugados y partidos jugados pueden serrelevantes. En el segundo caso, algunos de estos atributos seríanrelevantes pero otros serían reemplazados (o potenciados) por atributoscomo salario medio, crédito total, opciones elegidas para el plan depensión, dirección postal, etc. Para desarrollar un conjuntosignificativo de atributos para un objeto, el analista puede estudiar denuevo la narrativa del proceso (o descripción del ámbito del alcance)para el problema y seleccionar aquellos elementos que razonablemente“pertenecen” al objeto. Además, para cada objeto debe responderse elsiguiente interrogante: “¿Qué elementos (compuestos y/o simples) definencompletamente al objeto en el contexto del problema actual?” .

?2.5.3 Identificar Métodos en los Objetos

Las operaciones indican el comportamiento del objeto dentro del sistema,cambia uno o más atributos contenidos en el sistema.

Pueden ser clasificados entre tres grandes categorías

Operaciones que manipulan datos Operaciones que realizan algún Calculo 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 Manipulación Borrar.

Capítulo 3. Técnicas de Diseño Detallado

3.1 Diseño Algoritmico

31

Diseño 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 enmás o menos el mismo tiempo. Lenguaje algorítmico: Es una representación, en cualquier formadiagrama de flujo, pseudocódigo o cualquier otra), de un algoritmo.Lenguaje de Programación: son lenguajes especiales que ayudan al usuario a comunicarse con lacomputadora.  Establecen una comunicación entre el humano (que prefiere usar palabras, elsistema decimal) y la computadora, que trabaja solo con números binarios (0's y 1's). Tipos de Lenguajes:Lenguaje de máquina está orientado hacia la máquina que está constituida por varios arreglos de"bits.Es el lenguaje original de la computadora el cual es generado por el "software", y nopor el programador. dificil de entender para el humano Lenguaje de bajo nivel: Es un lenguaje de programación bien cercano al lenguaje de máquina.  Esdifícil de entender por las personas y requiere que los programadores codifiquen lasinstrucciones con muchos detalles.  Ejemplo:  lenguaje ensamblador.Lenguaje de alto nivel: Es un lenguaje que se asemeja más al lenguaje humano que a un lenguaje demáquina o ensamblador.  Es más fácil escribir programas en este lenguaje, pero luego deben sertraducidos por compiladores o intérpretes para que la computadora los entienda.

Apuntes de Fundamentos de Programación de Sistemas

Antes de iniciar, es necesario conocer los conceptos principales que sonde uso necesario para la solución de problemas por medio de computadoras.

Algoritmo: es un conjunto finito de instrucciones que, cuando seejecutan, efectúan una tarea particular.

Un algoritmo es un sistema definido de instrucciones, finito en número,para lograr una cierta tarea que, dado un sistema de entradas, dé lugar aun cierto estado reconocible. El concepto de un algoritmo es ilustrado amenudo por el ejemplo de una receta, aunque muchos algoritmos son muchomás complejos; los algoritmos tienen a menudo pasos que repitan (iteren)o requieran decisiones (tales como lógica o comparación) hasta que setermina la tarea

Diversos algoritmos pueden terminar la misma tarea con un diverso sistemade instrucciones en más o menos el mismo tiempo, espacio, o esfuerzo queotros. Por ejemplo, tenemos dos diversas recetas para hacer una ensaladade papa, una puede tener cáscara antes de cocer la papa, mientras que laotra presenta los pasos al revés, ambas hacen que los pasos se repitancon todas las papas y termina cuando la ensalada esta lista.

Ejecutando correctamente un algoritmo no solucionará el problema si elalgoritmo es dañado o no es apropiado para el problema. Por ejemplo, laejecución del algoritmo de la ensalada de papa fallará si no tenemospapas, incluso si todos los movimientos de preparar la ensalada serealizan como si las papas estuvieran allí.

Lenguaje algorítmico: Es una representación, en cualquier forma (diagramade flujo, pseudocódigo o cualquier otra), de un algoritmo.

32

Apuntes de Fundamentos de Programación de Sistemas

Lenguaje de Programación:

Los lenguajes de programación son lenguajes especiales que ayudan alusuario a comunicarse con la computadora.  Establecen una comunicaciónentre el humano (que prefiere usar palabras, el sistema decimal) y lacomputadora, que trabaja solo con números binarios (0's y 1's).

Tipos de Lenguajes:

Lenguaje de máquina: El lenguaje de máquina está orientado hacia lamáquina que está constituida por varios arreglos de "bits".  Estelenguaje es fácil de entender por la computadora, pero difícil para elusuario.  Es el lenguaje original de la computadora el cual esgenerado por el "software", y no por el programador.

Lenguaje de bajo nivel: Es un lenguaje de programación bien cercano allenguaje de máquina.  Es difícil de entender por las personas yrequiere que los programadores codifiquen las instrucciones con muchosdetalles.  Ejemplo:  lenguaje ensamblador.

Lenguaje de alto nivel: Es un lenguaje que se asemeja más al lenguaje humanoque a un lenguaje de máquina o ensamblador.  Es más fácil escribirprogramas en este lenguaje, pero luego deben ser traducidos porcompiladores o intérpretes para que la computadora los entienda.

3.1.1 Elementos y Reglas para la Representación de Algoritmos

33

ELEMENTOS Y REGLAS PARA LA REPRESENTACIÓN DE ALGORITMOSLas tres técnicas de formulación de algoritmos más ocupadas son:Pseudocódigo: Es un lenguaje de especificación de algoritmos. El uso de tal lenguaje hace elpaso de codificación final (esto es, la traducción a un lenguaje de programación)relativamente fácil. era un medio para representar básicamente las estructuras de control deprogramación estructurada. Se considera un primer borrador, dado que el pseudocódigo tieneque traducirse posteriormente a un lenguaje de programación. Y no puede ser ejecutado por unacomputadora.Diagramas de Flujo: Se basan en la utilización de diversos símbolos para representaroperaciones específicas. Se les llama diagramas de flujo porque los símbolos utilizados seconectan por medio de flechas para indicar la secuencia de operación. Diagramas Estructurados (nassi-schneiderman: o Chapín, es como un diagrama de flujo en el quese omiten las flechas de unión y las cajas son continuas. Las acciones sucesivas se escribenen cajas sucesivas, y, como en los diagramas de flujo, se pueden escribir diferentes acciones

Apuntes de Fundamentos de Programación de Sistemas

Las tres técnicas de formulación de algoritmos más ocupadas son: Diagramade flujo, Pseudocódigo y Diagramas estructurados

Pseudocódigo: Es un lenguaje de especificación de algoritmos. El uso detal lenguaje hace el paso de codificación final (esto es, la traducción aun lenguaje de programación) relativamente fácil.

El pseudocódigo nació como un lenguaje similar al inglés y era un mediopara representar básicamente las estructuras de control de programaciónestructurada. Se considera un primer borrador, dado que el pseudocódigotiene que traducirse posteriormente a un lenguaje de programación. Cabeseñalar que el pseudocódigo no puede ser ejecutado por una computadora.

La ventaja del pseudocódigo es que en su uso en la planificación de unprograma, el programador se puede concentrar en la lógica y en lasestructuras de control y no preocuparse de las reglas de un lenguajeespecífico. Es también fácil modificar el pseudocódigo si se descubrenerrores o anomalías en la lógica del programa, además de todo esto esfácil su traducción a lenguajes como pascal, COBOL, C, FORTRAN o BASIC.

El pseudocódigo utiliza para representar las acciones sucesivas palabrasreservadas en inglés (similares a sus homónimos en los lenguajes deprogramación), tales como star,begin, end, stop, if-then-else, while,repeat-until….etc

Diagramas de Flujo: Se basan en la utilización de diversos símbolos pararepresentar operaciones específicas. Se les llama diagramas de flujoporque los símbolos utilizados se conectan por medio de flechas paraindicar la secuencia de operación.

La simbología utilizada para la elaboración de diagramas de flujo esvariable y debe ajustarse a un patrón definido previamente.

La simbología utilizada para la elaboración de diagramas de flujo esvariable y debe ajustarse a un patrón definido previamente.

SIMBOLOGÍA UTILIZADA EN LOS DIAGRAMAS DE FLUJO

Símbolo FunciónSímbolo Función

Inicio/Fin Conector (mismaHoja)

34

Apuntes de Fundamentos de Programación de Sistemas

Proceso Conector (cambio dehoja)

Lectura

Ciclos

Escritura

Decisión Indica el flujo

Diagramas Estructurados (nassi-schneiderman): El diagrama N-S de Nassi-Schneiderman, también conocido como diagrama de Chapín, es como undiagrama de flujo en el que se omiten las flechas de unión y las cajasson contiguas. Las acciones sucesivas se escriben en cajas sucesivas, y,como en los diagramas de flujo, se pueden escribir diferentes acciones enuna caja.

Los Diagramas Estructurados, son una técnica que permite formularalgoritmos mediante una representación geométrica y de asignación deespacios de un bloque específico.

3.2 Diseño Algorítmico de Funciones

Unidad 4 Introducción a Programación

4.1 Clasificación Del Software

35

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 realización de una tarea especificaCLASIFICACIÓN DEL SOFTWARESoftware de Sistema: El software de sistema son los programas básicos el cual controla a la computadora, también 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 Aplicación El software de aplicación permite a los usuarios llevar a cabo una o varias tareas mas especificas, el software de aplicación son aquellos que nos ayudan a la elaboración de una determinada tarea, este tipo de software es diseñado para facilitar al usuario en la realización

Apuntes de Fundamentos de Programación de Sistemas

El software son los programas los cuales contienen las instruccionesresponsables de que el Hardware realice su tarea, se le denomina Softwarea todos los componentes intangibles de un ordenador, es decir, elconjunto de programas y procedimientos necesarios para hacer posible larealización de una tarea especifica, en contraposición a los componentesfísicos de un sistema de computo. Esto incluye aplicaciones informáticastales como un procesador de textos, que permite al usuario realizar unatarea, sistema operativo que permite funcionar al resto de los programasadecuadamente.

Clasificación del Software de acuerdo al tipo de trabajo realizado Software de Sistema

Colección de programas residentes en la computadora, este tipo desoftware resulta pieza esencial para el uso de la computadora y eldesarrollo de más software, una definición mas que podemos dar es que esuna de las partes que permite el funcionamiento de la computadora, elobjetivo del software de sistema es aislar tanto como sea posible alprogramador de aplicaciones de los detalles del computador particular quese use, especialmente de las características físicas de la memoria,impresoras, pantallas, teclados etc. El software de sistema son los programas básicos el cual controla a lacomputadora, también llamado sistema operativo el cual tiene tres grandesfunciones: coordina y manipula el hardware del ordenador, como lamemoria, las unidades de disco; organiza los archivos en diversosdispositivos de almacenamiento y gestiona los errores de hardware y delmismo software. Los sistemas operativos pueden ser de tarea única o multitarea. Lossistemas operativos de tarea única, los más primitivos, solo puedenmanejar un proceso en cada momento. Todos los sistema operativos modernos son multitarea, esto quiere decirque puedes realizar varias acciones a la ves como por ejemplo mandar aimprimir y estar trabajando con otro documento o lo mas usual estarnavegando por internet y escuchar muisca.

Software de Aplicación

36

Apuntes de Fundamentos de Programación de Sistemas

El software de aplicación permite a los usuarios llevar a cabo una ovarias tareas mas especificas, en cualquier campo de actividadsusceptible de ser automatizado o asistido, con especial énfasis en losnegocios, también podemos decir que el software de aplicación sonaquellos que nos ayudan a la elaboración de una determinada tarea, estetipo de software es diseñado para facilitar al usuario en la realizaciónde un determinado tipo de trabajo. Ejem Office de Microsoft (Word, Excel,One Note, etc.El software de aplicación resulta una solución informática para laautomatización de ciertas tareas complicadas como puede ser lacontabilidad y gestión de una organización, como ejemplo del software deaplicación podemos mencionar a la paquetería que nos ofrece Office deMicrosoft (Word, Excel, One Note, etc.), Word Perfec, Lotus 123.

Software de Desarrollo

El software de desarrollo recibe varios nombre, como software deprogramación o lenguaje de programación del software, en si el softwarede desarrollo es cualquier lenguaje artificial que podemos utilizar paradefinir una secuencia de instrucciones para su procesamiento por unordenador. Es complicado definir que es y que no es un software dedesarrollo, generalmente se dice que la traducción de las instrucciones aun código que comprende la computadora deber ser completamentesistemática (sigue o se ajusta a un conjunto de reglas). El software de programación proporciona herramientas para ayudar alprogramados s escribir programas informáticos y a usar diferenteslenguajes de programación de forma practica(Java,), entre los lenguajesde programación mas utilizados podemos mencionar: C++, Java, C#, VisualBasic, etc.

4.2 Conceptos de la Programación

37

PROGRAMACIÓN: es automatizar y definir una serie de procesos para resolver unproblema y obtener un resultado final. Un programa es el conjunto deinstrucciones que se le dan al ordenador para resolver un problema o tareadeterminada. se componen de ordenes (en adelante llamadas instrucciones) que eslo que en si mismo le dice al ordenador lo que tiene que hacer. Un conjunto deesas instrucciones forman el programa. Programa:Un programa es un conjunto de instrucciones u ordenes basadas en unlenguaje de programación que una computadora interpreta para resolver unproblema o una función especifica. LENGUAJE DE PROGRAMACIÓN es aquel elemento dentro de la informática que nospermite crear programas mediante un conjunto de instrucciones, operadores yreglas de sintaxis. un lenguaje de programación es un sistema notacional paradescribir conputaciones de una forma legible tanto para la maquina como para el

Apuntes de Fundamentos de Programación de Sistemas

Programación: es automatizar y definir una serie de procesos pararesolver un problema y obtener un resultado final. Un programa es elconjunto de instrucciones que se le dan al ordenador para resolver unproblema o tarea determinada. Consiste en proporcionar a un equipo unconjunto de instrucciones (o sentencias) que deben ser ejecutadas enorden, y que proporcionan una salida. Preparación de los datos previosindispensables para obtener la solución de un problema mediante lasinstrucciones codificadas de un ordenador. Lenguaje de Programación Seutilizan para indicar al ordenador las acciones que ha de realizar pararesolver un determinado problema. Básicamente los lenguajes deprogramacion se componen de ordenes (en adelante llamadas instrucciones)que es lo que en si mismo le dice al ordenador lo que tiene que hacer. Unconjunto de esas instrucciones forman el programa

4.2.1 Definición de Programa

Un programa es un conjunto de instrucciones u ordenes basadas en unlenguaje de programación que una computadora interpreta para resolver unproblema o una función especifica.

4.2.2 Definición de Programación

La programación es generar un conjunto de sentencias utilizadas paraescribir secuencias de instrucciones para que ejecute una computadorausando un lenguaje de programación.

4.2.3 Definición Lenguajes de Programación

Un lenguaje de programación es aquel elemento dentro de la informáticaque nos permite crear programas mediante un conjunto de instrucciones,operadores y reglas de sintaxis; que pone a disposición del programadorpara que este pueda comunicarse con los dispositivos hardware y softwareexistentes.

UN LENGUAJE DE PROGRAMACIÓN ES UN SISTEMA NOTACIONAL PARA DESCRIBIRCONPUTACIONES DE UNA FORMA LEGIBLE TANTO PARA LA MAQUINA COMO PARA EL SERHUMANO

4.3 Datos Definición

Un dato puede definirse como la unidad mínima de información o bit, puedeser un caracter una palabra, etc.

4.3.1 Tipos de Datos

38

Apuntes de Fundamentos de Programación de Sistemas

Simples o primitivos: son aquellos que no tienen “descomposición”,están predefinidos en el lenguaje, ejemplo de estos son: enteros (int,byte, long), reales (flota, double), carácter (char) y booleanos..

Estructurales o compuestos: Son aquellos que agrupan un conjunto de datosprimitivos, como pueden ser: Arreglos, pilas o estructuras e incluso lascadenas 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.

Un identificador puede tener uno o mas caracteres (letras, digitos ycaracter de subrayado), siendo significativos los primeros 32.

El primer caracter debe ser una letra o un símbolo de _. Se consideran caracteres distintos las mayúsculas y las minúsculas.

4.3.3 Sistema de Numeración Binaria y Hexadecimal

El sistema binario es el que usan los ordenadores, que es como si sólotuvieran un dedo, su unidad básica de memoria, el bit, sólo puede tomardos valores, inactivo o activo, y se codifican como 0 y 1,respectivamente. Los ordenadores se quedan sin dedos enseguida, en cuantotienen que contar más de uno, así que añaden más dígitos. Por ejemplo,veamos el número binario 10110. Estamos en base 2, así que el número secalcula así: 0 * 2^0 + 1 * 2^1 + 1 * 2^2 + 0 * 2^3 + 1 * 2^4 = 2 + 4 + 16= 22 (decimal). Este tipo de numeración resulta muy útil cuando cada bitpuede significar cosas diferentes para un ordenador.

El sistema hexadecimal, que es el rey de los sistemas de numeración, almenos en lo que respecta a los ordenadores. Usa 16 dígitos, losarchiconocidos 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. Seusan indistintamente mayúsculas y minúsculas. Por ejemplo, un númerohexadecimal 4F3D: 13 * 16^0 + 3 * 16^1 + 15 * 16^2 + 4 * 16^3 = 13 + 3 *16+ 15 * 256 + 4 * 4096 = 20285 Este sistema de numeración tiene muchasventajas:

La conversión entre binario y hexadecimal es tan simple como enoctal, la única diferencia es que los bits se agrupan de cuatro encuatro. 0000 es 0, 0001 es 1, 0010 es 2 … 1111 es F.

39

Apuntes de Fundamentos de Programación de Sistemas

El byte, es la unidad de memoria más usada por los ordenadores yagrupa ocho bits. Para codificar un número de 8 bits sólo senecesitan dos dígitos hexadecimales. El mayor número expresable porun byte, 11111111(binario), equivale a 255(decimal) y aFF(hexadecimal).

Y para palabras de dos bytes (16 bits), se usan sólo cuatro dígitoshexadecimales. (El número 16 aparece mucho cuando se habla deordenadores.)

Para 32 bits: 8 dígitos hexadecimales, y sucesivamente.

4.4 Operadores, Operandos y Expresiones

Los operadores pueden aparecer en las expresiones, e indican alcompilador la realización de determinadas operaciones matemáticas,lógicas y numéricas. Se aplican a variables u otros objetos denominadosoperandos y su efecto es una combinación de las siguientes acciones:

Producir un resultado-valor Alterar un operando Designar un objeto o función.

Operadores aritméticos

Existen dos tipos de operadores aritméticos:

Los binarios:

+ Suma- Resta* Multiplicación/ División% Módulo (resto)

y los unarios:

++ Incremento (suma 1)- - Decremento (resta 1)- Cambio de signo

Su sintaxis es:

binarios:<variable1><operador><variable2>

unarios:<variable><operador> y al revés, <operador><variable>.

40

Apuntes de Fundamentos de Programación de Sistemas

Operadores de asignación

La mayoría de los operadores aritméticos binarios explicados en el capítulo anterior tienen su correspondiente operador deasignación:

= Asignación simple+= Suma-= Resta*= Multiplicación/= División%= Módulo (resto)

Con estos operadores se pueden escribir, de forma más breve, expresiones del tipo:

n=n+3 se puede escribir n+=3k=k*(x-2) lo podemos sustituir por k*=x-2

Expresiones

Una expresión en un lenguaje de programación es una combinación de losvalores, funciones, símbolo, átomos, y procedimientos, interpretadossegún las reglas de la precedencia particulares y de la asociación paraun lenguaje de programación particular, que computa y después devuelveotro valor.

Las expresiones pueden o pueden no tener efectos secundarios.

4.5 Prioridad Operadores en evaluación de expresiones

Será importante tener en cuenta la precedencia de los operadores a lahora de trabajar con ellos:

( ) Mayor precedencia++, - -*, /, %+, - Menor precendencia

Las operaciones con mayor precedencia se realizan antes que las de menorprecedencia.

Si en una operación encontramos signos del mismo nivel de precedencia,dicha operación se realiza de izquierda a derecha. A continuación semuestra un ejemplo sobre ello:

41

Apuntes de Fundamentos de Programación de Sistemas

a*b+c/d-e

1. a*b resultado = x2. c/d resultado = y3. x+y resultado = z4. z-e

Fijarse que la multiplicación se resuelve antes que la división ya queestá situada más a la izquierda en la operación. Lo mismo ocurre con lasuma y la resta.

4.6 Estructura de un Programa

4.6.1 Estructura de un Programa en Java

Todo programa en Java consta de una o más clases, donde dentro de algunade ellas debe existir un método llamado main. El programa comienza aejecutarse en el método main, desde el cual es posible trabajar con otrosmétodos, e incluso con otras clases.

CLASES EN JAVA

Las clases son el centro de la Programación Orientada a Objetos (OOP - ObjectOriented Programming).

Algunos de los conceptos más importantes de la POO son los siguientes:

1. Encapsulación. Las clases pueden ser declaradas como públicas (public) ycomo package (accesibles sólo para otras clases del package). Las variablesmiembro y los métodos pueden ser public, private, protected y package. De estaforma se puede controlar el acceso y evitar un uso inadecuado.

42

ESTRUCTURA DE UN PROGRAMA EN JAVA: Todo programa en Java consta de una o más clases, donde dentro de alguna de ellas debe existir un método llamado main. El programa comienza a ejecutarse en el método main, desde el cual es posible trabajar con otros métodos, e incluso con otras clases. CLASES EN JAVALas clases son el centro de la Programación Orientada a Objetos.Algunos de los conceptosmás importantes de la POO son los siguientes:1. ENCAPSULACIÓN. Las clases pueden ser declaradas como públicas (public) y como package (accesibles sólo para otras clases del package). Las variables miembro y los métodos 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 todassus variables y métodos. Una clase derivada puede añadir nuevas variables y métodosy/o redefinir las variables y métodos heredados.3. POLIMORFISMO. Los objetos de distintas clases pertenecientes a una misma

Apuntes de Fundamentos de Programación de Sistemas

2. Herencia. Una clase puede derivar de otra (extends), y en ese caso heredatodas sus variables y métodos. Una clase derivada puede añadir nuevasvariables y métodos y/o redefinir las variables y métodos heredados.

3. Polimorfismo. Los objetos de distintas clases pertenecientes a una mismajerarquía o que implementan una misma interface pueden tratarse de unaforma general e individualizada, al mismo tiempo. Esto facilita laprogramación y el mantenimiento del código.

Recordando el Concepto de Clase

Una clase es una agrupación de datos (variables o campos) y de funciones(métodos) que operan sobre esos datos. La definición de una clase serealiza en la siguiente forma:

[public] class Classname{// definición de variables y métodos...}

donde la palabra public es opcional: si no se pone, la clase tiene lavisibilidad por defecto, esto es, sólo es visible para las demás clasesdel package. Todos los métodos y variables deben ser definidos dentro delbloque {...} de la clase.

Un objeto (en inglés, instance) es un ejemplar concreto de una clase. Lasclases son como tipos de variables, mientras que los objetos son comovariables concretas de un tipo determinado.

Classname unObjeto;Classname otroObjeto;

A continuación se enumeran algunas características importantes de lasclases:

43

CARACTERISTICAS IMPORTANTES DE LAS CLASES:o Todas las variables y funciones de Java deben pertenecer a una clase.o Si una clase deriva de otra (extends), hereda todas sus variables y métodos.o Java tiene una jerarquía de clases.o Una clase sólo puede heredar de una única clase.o En un fichero se pueden definir varias clases, pero en un fichero no puede

haber más que una clase public.

Apuntes de Fundamentos de Programación de Sistemas

a) Todas las variables y funciones de Java deben pertenecer a una clase. Nohay variables y funciones globales.

b) Si una clase deriva de otra (extends), hereda todas sus variables ymétodos.

c) Java tiene una jerarquía de clases estándar de la que pueden derivar lasclases que crean los usuarios.

d) Una clase sólo puede heredar de una única clase (en Java no hay herenciamúltiple). Si al definir una clase no se especifica de qué clasederiva, por defecto la clase deriva de Object. La clase Object es la basede toda la jerarquía de clases de Java.

e) En un fichero se pueden definir varias clases, pero en un fichero nopuede haber más que una clase public. Este fichero se debe llamar comola clase public que contiene con extensión *.java. Con algunasexcepciones, lo habitual es escribir una sola clase por fichero.

f) Si una clase contenida en un fichero no es public, no esnecesario que el fichero se llame como la clase.

g) Los métodos de una clase pueden referirse de modo global al objeto deesa clase al que se aplican por medio de la referencia this.

h) Las clases se pueden agrupar en packages, introduciendo unalínea al comienzo del fichero (package packageName;). Esta agrupación enpackages está relacionada con la jerarquía de directorios y ficheros enla que se guardan las clases.

Control de Acceso

44

CONTROL DE ACCESO : Cuando se crea una nueva clase en Java, se puede especificarel nivel de acceso que se quiere para las variables de instancia y los métodos definidosen la clase:public: Cualquier clase desde cualquier lugar puede acceder a las variables y métodos de instaciapúblicos.  protected: Sólo las subclases de la clase y nadie más puede acceder a las variables y métodos deinstancia protegidos.  private: Las variables y métodos de instancia privados sólo pueden ser accedidos desde dentro dela clase. No son accesibles desde las subclases. friendly (sin declaración específica): Por defecto, si no se especifica el control de acceso, las

Apuntes de Fundamentos de Programación de Sistemas

Cuando se crea una nueva clase en Java, se puede especificarel nivel de acceso que se quiere para las variables de instancia ylos métodos definidos en la clase: public: Cualquier clase desde cualquier lugar puede acceder a lasvariables y métodos de instacia públicos.  protected: Sólo las subclases de la clase y nadie más puede acceder a lasvariables y métodos de instancia protegidos.  private: Las variables y métodos de instancia privados sólo pueden seraccedidos desde dentro de la clase. No son accesibles desde lassubclases.

friendly (sin declaración específica): Por defecto, si no se especificael control de acceso, las variables y métodos de instancia se declaranfriendly (amigas), lo que significa que son accesibles por todos losobjetos dentro del mismo paquete, pero no por los externos al paquete. Eslo mismo que protected.  Los métodos protegidos (protected) pueden ser vistos por las clasesderivadas, como en C++, y también, en Java, por los paquetes (packages).Todas las clases de un paquete pueden ver los métodos protegidos de esepaquete. Para evitarlo, se deben declarar como private protected, lo quehace que ya funcione como en C++ en donde sólo se puede acceder a lasvariables y métodos protegidos de las clases derivadas. Una de las grandes fortalezas de Java es su rica colección de clasespredefinidas, las cuales pueden reutilizar los programadores en lugar deprogramar las propias.

Import

Las diversas clases predefinidas se agrupan en categorías de clasesrelacionadas llamadas paquetes. A los paquetes se les conoce de maneracolectiva como “biblioteca de clases de Java” o como la “Interfaz deProgramación 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 lomismo que #include de C/C++). Se pueden cargar varias clases utilizando unasterisco.

import java.Date; import java.awt.*;

45

Apuntes de Fundamentos de Programación de Sistemas

Cada porción del nombre del paquete es un directorio o carpeta en eldisco. 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 ycomunicaciones. Los Principales paquetes Java que se incluyen son:

java.applet: Este paquete contiene clases diseñadas para usar conapplets. Hay una clase Applet y tres interfaces: AppletContext,AppletStub y AudioClip.

java.awt: El paquete Abstract Windowing Toolkit (awt) contiene clasespara generar widgets y componentes GUI (Interfaz Gráfico 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 aficheros: FileInputStream y FileOutputStream.

java.lang: Este paquete incluye las clases del lenguaje Java propiamentedicho: Object, Thread, Exception, System, Integer, Float, Math, String,etc.

java.net: Este paquete da soporte a las conexiones del protocolo TCP/IPy, además, incluye las clases Socket, URL y URLConnection.

java.util: Este paquete es una miscelánea de clases útiles para muchascosas en programación. Se incluyen, entre otras, Date (fecha), Dictionary(diccionario), Random (números aleatorios) y Stack (pila FIFO).

javax.swing: Contiene clases para manejar cajas de dialogo.

A continuación se presenta la estructura principal e un programa en Java

import paquete1;import paquete2;public class PrimeraClase{ public static void main(String[] args) { declaración variables y/o objetos bloque de sentencias }}

46

Apuntes de Fundamentos de Programación de Sistemas

Variables y Métodos Estáticos

En un momento determinado se puede querer crear una clase en la que elvalor de una variable de instancia sea el mismo (y de hecho sea la mismavariable) para todos los objetos instanciados a partir de esa clase. Esdecir, que exista una única copia de la variable de instancia. Se usarápara ello la palabra clave static. class Documento extends Pagina { static int version = 10;} El valor de la variable version será el mismo para cualquier objetoinstanciado de la clase Documento. Siempre que un objeto instanciado deDocumento cambie la variable version, ésta cambiará para todos losobjetos.De la misma forma se puede declarar un método como estático, lo que evitaque el método pueda acceder a las variables de instancia no estáticas: 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 }} La modificación de la variable numero_de_capitulos no funciona porque seestá violando una de las reglas de acceso al intentar acceder desde unmétodo estático a una variable no estática. Todas las clases que se derivan, cuando se declaran estáticas, compartenla misma página de variables; es decir, todos los objetos que se generencomparten la misma zona de memoria. Las funciones estáticas se usan paraacceder solamente a variables estáticas. 

47

EJEMPLO DE DEFINICIÓN DE UNA CLASE

// 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 develocidades----> "+cambios); } Bicicleta(int numVelocidad,int velocidadInicial)// Constructor de la clase {

Apuntes de Fundamentos de Programación de Sistemas

EJEMPLO DE DEFINICIÓN DE UNA CLASE

// 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);

48

Apuntes de Fundamentos de Programación de Sistemas

System.out.println("Cambio Actual----> "+numeroVelocidad); System.out.println("Numero de velocidades----> "+cambios);

} Bicicleta(int numVelocidad,int velocidadInicial) // Constructorde la clase {

numeroVelocidad=numVelocidad; velocidad=velocidadInicial;

} Bicicleta( ) // Sobrecarga del constr {

numeroVelocidad=1; velocidad=0;

} } En este ejemplo se ve cómo se definen las variables miembro y los métodosdentro de la clase. Dichas variables y métodos pueden ser de objeto o de clase(static). Se puede ver también cómo el nombre del fichero coincide con elde la clase public con la extensión *.java.

VARIABLES MIEMBRO

A diferencia de la programación algorítmica clásica, que estaba centradaen las funciones, la programación orientada a objetos está centrada en losdatos. Una clase está constituida por unos datos y unos métodos que operansobre esos datos.

Variables miembro de objeto

Cada objeto, es decir cada ejemplar concreto de la clase, tiene su propiacopia de las variables miembro. Las variables miembro de una clase(también llamadas campos) pueden ser de tipos primitivos (boolean, int, long,double, …) o referencias a objetos de otra clase (composición).

Un aspecto muy importante del correcto funcionamiento de los programas esque no haya datos sin inicializar. Por eso las variables miembro de tiposprimitivos se inicializan siempre de modo automático, incluso antes de

49

VARIABLES MIEMBRO:A diferencia de la programación algorítmica clásica, que estaba centrada enlas funciones, la programación orientada a objetos está centrada en los datos. Una clase estáconstituida por unos datos y unos métodos que operan sobre esos datos. VARIABLES MIEMBRO DEOBJETO :Cada objeto, es decir cada ejemplar concreto de la clase, tiene su propia copia delas variables miembro. Las variables miembro de una clase (también llamadas campos) pueden serde tipos primitivos (boolean, int, long, double, …) o referencias a objetos de otra clase (composición).VARIABLES MIEMBRO DE CLASE (STATIC). Una clase puede tener variables propias de la clase y node cada objeto. A estas variables se les llama variables de clase o variables static. Las variablesstatic se suelen utilizar para definir constantes comunes para todos los objetos de la clase.

Apuntes de Fundamentos de Programación de Sistemas

llamar al constructor (false para boolean, el carácter nulo para char y cero paralos tipos numéricos). De todas formas, lo más adecuado es inicializarlastambién en el constructor.

Las variables miembro pueden también inicializarse explícitamente en ladeclaración, como las variables locales, por medio de constantes o llamadasa métodos (esta inicialización no está permitida en C++). Por ejemplo,long nDatos = 100;

Las variables miembro se inicializan en el mismo orden en que aparecen enel código de la clase. Esto es importante porque unas variables puedenapoyarse en otras previamente definidas.

Cada objeto que se crea de una clase tiene su propia copia de las variablesmiembro. Por ejemplo, cada objeto de la clase Circulo tiene sus propiascoordenadas del centro x e y, y su propio valor del radio r.

Los métodos de objeto se aplican a un objeto concreto poniendo el nombre delobjeto y luego el nombre del método, separados por un punto. A esteobjeto se le llama argumento implícito. Por ejemplo, para calcular el área deun objeto de la clase Circulo llamado c1 se escribirá: c1.area();.

Las variables miembro del argumento implícito se acceden directamente oprecedidas por la palabra this y el operador punto.

Las variables miembro pueden ir precedidas en su declaración por uno delos modificadores de acceso: public, private, protected y package (que es elvalor por defecto y puede omitirse). Junto con los modificadores deacceso de la clase (public y package), determinan qué clases y métodos van atener permiso para utilizar la clase y sus métodos 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. Lasvariables static se suelen utilizar para definir constantes comunes paratodos los objetos de la clase (por ejemplo PI en la clase Circulo) ovariables que sólo tienen sentido para toda la clase (por ejemplo, uncontador de objetos creados como numCirculos en la clase Circulo).

Las variables de clase son lo más parecido que Java tiene a las variablesglobales de C/C++.

Las variables de clase se crean anteponiendo la palabra static a sudeclaración. Para llamarlas se suele utilizar el nombre de la clase (noes imprescindible, pues se puede utilizar también el nombre de cualquierobjeto), porque de esta forma su sentido queda más claro. Por ejemplo,

50

Apuntes de Fundamentos de Programación de Sistemas

Circulo.numCirculos es una variable de clase que cuenta el número de círculoscreados.

Si no se les da valor en la declaración, las variables miembro static seinicializan con los valores por defecto para los tipos primitivos (falsepara boolean, el carácter nulo para char y cero para los tipos numéricos),y con null si es una referencia.

Las variables miembro static se crean en el momento en que pueden sernecesarias: cuando se va a crear el primer objeto de la clase, en cuantose llama a un método static o en cuanto se utiliza una variable static dedicha clase. Lo importante es que las variables miembro static seinicializan siempre antes que cualquier objeto de la clase.

VARIABLES FINALES

Una variable de un tipo primitivo declarada como final no puede cambiar suvalor a lo largo de la ejecución del programa. Puede ser considerada comouna constante, y equivale a la palabra const de C/C++.

Java permite separar la definición de la inicialización de una variable final. Lainicialización puede hacerse más tarde, en tiempo de ejecución, llamandoa métodos o en función de otros datos.

La variable final así definida es constante (no puede cambiar), pero no tienepor qué tener el mismo valor en todas las ejecuciones del programa, puesdepende de cómo haya sido inicializada.

Además de las variables miembro, también las variables locales y lospropios argumentos de un método 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 través de otrareferencia. 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 laaplicación donde dicha variable es accesible y por lo tanto puede serutilizada en una expresión. En Java todas las variables deben estarincluidas en una clase. En general las variables declaradas dentro deunas llaves {}, es decir dentro de un bloque, son visibles y existendentro de estas llaves. Por ejemplo las variables declaradas al principiode una función existen mientras se ejecute la función; las variablesdeclaradas dentro de un bloque if no serán válidas al finalizar lassentencias correspondientes a dicho if y las variables miembro de una clase

51

Apuntes de Fundamentos de Programación de Sistemas

(es decir declaradas entre las llaves {} de la clase pero fuera decualquier método) son válidas mientras existe el objeto de la clase.

Las variables miembro de una clase declaradas como public son accesibles através de una referencia a un objeto de dicha clase utilizando el operadorpunto (.). Las variables miembro declaradas como private no son accesiblesdirectamente desde otras clases. Las funciones miembro de una clase tienenacceso directo a todas las variables miembro de la clase sin necesidad deanteponer el nombre de un objeto de la clase. Sin embargo las funcionesmiembro de una clase B derivada de otra A, tienen acceso a todas lasvariables miembro de A declaradas como public o protected, pero no a lasdeclaradas como private. Una clase derivada sólo puede acceder directamentea las variables y funciones miembro de su clase base declaradas como publico protected. Otra característica del lenguaje es que es posible declararuna variable dentro de un bloque con el mismo nombre que una variablemiembro, pero no con el nombre de otra variable local que ya existiera.La variable declarada dentro del bloque oculta a la variable miembro enese bloque. Para acceder a la variable miembro oculta será precisoutilizar el operador this, en la forma this.varname.

Uno de los aspectos más importantes en la programación orientada aobjetos (OOP) es la forma en la cual son creados y eliminados losobjetos. En Java la forma de crear nuevos objetos es utilizando el operadornew. Cuando se utiliza el operador new, la variable de tipo referenciaguarda la posición de memoria donde está almacenado este nuevo objeto.Para cada objeto se lleva cuenta de por cuántas variables de tipo referenciaes apuntado. La eliminación de los objetos la realiza el programadenominado garbage collector, quien automáticamente libera o borra la memoriaocupada por un objeto cuando no existe ninguna referencia apuntando a eseobjeto. Lo anterior significa que aunque una variable de tipo referenciadeje de existir, el objeto al cual apunta no es eliminado si hay otrasreferencias apuntando a ese mismo objeto.

4.6.2 Comentarios

A la hora de programar es conveniente añadir comentarios (cuantos másmejor) para poder saber que función tiene cada parte del código, en casode que no lo utilicemos durante algún tiempo. Además facilitaremos eltrabajo a otros programadores que puedan utilizar nuestro archivo fuente.

Para poner comentarios en un programa escrito en C usamos los símbolos /*y */ , o bien //:

/* Este es un ejemplo de comentario */ // Usando las diagonales

/* Un comentario también puede // Para varias líneas se debenestar escrito en varias líneas */ // incluir en cada una

52

Apuntes de Fundamentos de Programación de Sistemas

Los comentarios no será tenido en cuenta por el compilador.

4.7 Proceso Creación de un Ejecutable

Programas traductores: Son los que traducen instrucciones de lenguajes deprogramación de alto nivel al código binario del lenguaje de la máquina.

Ejemplos de programas traductores

Compilador: Es un programa que traduce un lenguaje de alto nivel allenguaje de máquina de una computadora.  Según va ejecutando latraducción, coteja los errores hechos por el programador.  Traduceun programa una sola vez, generalmente, y es cinco veces más rápidoque los programas intérpretes.  Ejemplos:  ALGOL, BASIC, COBOL,FORTRAN, PASCAL y PL/1.

Intérprete: Es un programa que traduce un lenguaje de alto nivel al lenguajede máquina de una computadora.  El programa siempre permanece en su formaoriginal (programa fuente) y traduce cuando está en la fase de ejecucióninstrucción por instrucción.  Ejemplo:  BASIC

Unidad 5 Implementación de la Clase 5.1 Modificadores de Acceso

Los modificadores son elementos del lenguaje que se colocan delante dela definición de variables locales, datos miembro, métodos o clases y quealteran o condicionan el significado del elemento.

Uno de los más importantes es el modificador static que se usa paradefinir datos miembros o métodos como pertenecientes a una clase, enlugar de pertenecer a una instancia.

En este capítulo se presentan los modificadores de acceso, que sonaquellos que permiten limitar o generalizar el acceso a los componentesde una clase o a la clase en si misma. Los modificadores de acceso permiten al diseñador de una clase determinarquien accede a los datos y métodos miembros de una clase.

Los modificadores de acceso preceden a la declaración de un elemento dela clase (ya sea dato o método), de la siguiente forma: [modificadores] tipo_variable nombre;

53

Apuntes de Fundamentos de Programación de Sistemas

[modificadores] tipo_devuelto nombre_Metodo ( lista_Argumentos );

Existen los siguientes modificadores de acceso:

public - Todo el mundo puede acceder al elemento. Si es un datomiembro, todo el mundo puede ver el elemento, es decir, usarlo yasignarlo. Si es un método todo el mundo puede invocarlo.

private - Sólo se puede acceder al elemento desde métodos de la clase,o sólo puede invocarse el método desde otro método de la clase.

protected - El campo o método es visible en la clase en donde sedefine y en cualquiera de sus subclases..

sin modificador - Se puede acceder al elemento desde cualquier clasedel package donde se define la clase.

Pueden utilizarse estos modificadores para cualquier tipo de miembros dela clase, incluidos los constructores (con lo que se puede limitar quienpuede 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

Declaración de Métodos:[modificador de acceso] tipo_retorno nmbFuncion(tipo1 arg1,tipo2 arg2,…){

Sentencias[return(tipo)];

}

EJEMPLO en Java:

class numero {public int entero,s,r;

54

Apuntes de Fundamentos de Programación de Sistemas

public void sumar () { 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 instanciasde esa clase, siempre y cuando alguno de sus constructores seaaccesible.

sin modificador - La clase puede ser usada e instanciada por clasesdentro 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 diseñador de clases delimitar lafrontera entre lo que es accesible para los usuarios de la clase, lo quees estrictamente privado y ‘no importa’ a nadie más que al diseñador dela clase e incluso lo que podría llegar a importar a otros diseñadores declases que quisieran alterar, completar o especializar el comportamientode la clase.

Con el uso de estos modificadores se consigue uno de los principiosbásicos de la Programación Orientada a Objetos, que es la encapsulación:Las clases tienen un comportamiento definido para quienes las usanconformado por los elementos que tienen un acceso público, y unaimplementación oculta formada por los elementos privados, de la que notienen 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 seutilizan relaciones de herencia entre las clases y el segundo establecerelaciones de ‘confianza’ entre clases afines dentro del mismo package.Así, la pertenencia de las clases a un mismo package es algo más que unaclasificación de clases por cuestiones de orden.

Cuando se diseñan clases, es importante pararse a pensar en términos dequien debe tener acceso a que. Qué cosas son parte de la implantación y

55

Apuntes de Fundamentos de Programación de Sistemas

deberían ocultarse (y en que grado) y que cosas forman parte de lainterface y deberían ser públicas.

5.2 Encapsulamiento de la Clase

Definición previa: un paquete es una colección de clases que seencuentran en el mismo directorio.

Las clases permiten implementar tipos de datos abstractos. El problemaque se presenta es que desde cualquier clase se puede accesar los camposde un objeto perteneciente a otra clase. Esto es una violación alprincipio de abstracción que dice que un tipo de datos abstracto sólopuede ser manipulado a través de las operaciones que se definen paraéste.

Visibilidad de Campos y Métodos

En java al definir una clase se puede controlar la visibilidad quetendrán sus campos y métodos al exterior de la clase. Este control seefectúa de la siguiente forma: 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 método 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 unmétodo y su significado es el siguiente:

private: El campo o método sólo es visible dentro de la clase donde sedefine.

56

Apuntes de Fundamentos de Programación de Sistemas

protected: El campo o método es visible en la clase en donde se definey en cualquiera de sus subclases.

public: El campo o método es visible en cualquier clase. Ninguna de las anteriores: El campo o método 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 espública usando el atributo public. De este modo la clase podrá ser usadapor cualquier otra clase. Si la clase no es pública entonces la clasesólo puede ser usada dentro del paquete que la contiene.

public class Box extends Graph Obj { … }

5.3 El Método como Elemento de la Comunicación

Podemos definir método como un programa procedimental o proceduralescrito en cualquier lenguaje, que está asociado a un objeto determinadoy cuya ejecución sólo puede desencadenarse a través de un mensajerecibido por éste o por sus descendientes.

Son sinónimos de ‘método’ todos aquellos términos que se han aplicadotradicionalmente a los programas, como procedimiento, función, rutina,etc. Sin embargo, es conveniente utilizar el término ‘método’ para que sedistingan claramente las propiedades especiales que adquiere un programaen el entorno de POO, que afectan fundamentalmente a la forma deinvocarlo (únicamente a través de un mensaje) y a su campo de acción,limitado a un objeto y a sus descendientes, aunque posiblemente no atodos.

Si los métodos son programas, se deduce que podrían tener argumentos, oparámetros. Puesto que los métodos pueden heredarse de unos objetos aotros, un objeto puede disponer de un método de dos maneras diferentes:

57

Apuntes de Fundamentos de Programación de Sistemas

-Métodos propios. Están incluídos dentro de la cápsula del objeto. -Métodos heredados. Estan definidos en un objeto diferente, antepasado

de éste (padre,”abuelo”, etc.). A veces estos métodos se llamanmétodos miembro porque el objeto los posee por el mero hecho de sermiembro de una clase

5.3.1 Concepto de Parámetro

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 valores para que los use en algún proceso. Estos valores que se pasan del cuerpo principal del programa al procedimiento se llaman parámetros.

REGLAS PARA EL USO DE PARAMETROS

1. Cuando se usan variables como parámetros, la variable que se mandadebe ser declarada dentro del principal o del procedimiento de dondese esta enviando.

2. La variable que se manda tiene un nombre, la que se recibe puede tenerotro nombre.

3. La cantidad de variables que se envían 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 mandardatos, valores (excepto decimales), expresiones algebraicas, perosiempre se recibe en variables.

5.3.2 El Constructor

Un constructor es una función especial que sirve para construir oinicializar objetos. En C++ la inicialización de objetos no se puederealizar en el momento en que son declarados; sin embargo, tiene unacaracterística muy importante y es disponer de una función llamada

58

Concepto de parámetro: 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 función especial que sirve para construir o inicializar objetos. El Destructor Un destructor es una función miembro con igual nombre que la clase, pero precedido por el carácter.

Estructuras Secuenciales y Selectivas Entrada y Salida de Datos Aquí sólo trataremos la entrada/salida que se comunica con el usuario a través de la pantalla o de la ventana del terminal. Los programas necesitan comunicarse con su entorno, tanto para recoger datos e información que deben procesar, tanto para devolver los resultados obtenidos. System.out.print() y System.out.println().Son los primeros métodos que aprende cualquier programador. Suscaracterísticas fundamentales son:Pueden imprimir valores escritos directamente en el Código 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);

Apuntes de Fundamentos de Programación de Sistemas

constructor que permite inicializar objetos en el momento en que secrean. Un constructor es una función que sirve para construir un nuevo objeto yasignar valores a sus miembros dato. Se caracteriza por: - Tener el mismo nombre de la clase que inicializa - Puede definirse inline o fuera de la declaración de la clase - No devuelve valores - Puede admitir parámetros como cualquier otra función - Puede existir más de un constructor, e incluso no existir

Si no se define ningún constructor de una clase, el compilador generaráun constructor por defecto. El constructor por defecto no tieneargumentos y simplemente sitúa ceros en cada byte de las variablesinstancia de un objeto. Si se definen constructores para una clase, elconstructor por defecto no se genera.

Un constructor del objeto se llama cuando se crea el objetoimplícitamente: nunca se llama explícitamente a las funcionesconstructoras. Esto significa que se llama cuando se ejecuta ladeclaración del objeto. También, para objetos locales, el constructor sellama cada vez que la declaración del objeto se encuentra. En objetosglobales, el constructor se llama cuando se arranca el programa.

El constructor por defecto es un constructor que no acepta argumentos. Sellama cuando se define una instancia pero no se especifica un valorinicial.

Se pueden declarar en una clase constructores múltiples, mientras tomenparte diferentes tipos o número de argumentos. El compilador es entoncescapaz de determinar automáticamente a qué constructor llamar en cadacaso, examinando los argumentos.

Los argumentos por defecto se pueden especificar en la declaración delconstructor. Los miembros dato se inicializarán a esos valores pordefecto, si ningún otro se especifica.

5.3.3 El Destructor

Un destructor es una función miembro con igual nombre que la clase,pero precedido por el carácter ~. Una clase sólo tiene una funcióndestructor que, no tiene argumentos y no devuelve ningún tipo. Undestructor realiza la operación opuesta de un constructor, limpiando elalmacenamiento asignado a los objetos cuando se crean. C++ permite sóloun destructor por clase. El compilador llama automáticamente a undestructor del objeto cuando el objeto sale fuera del ámbito. Si un

59

Apuntes de Fundamentos de Programación de Sistemas

destructor no se define en una clase, se creará por defecto un destructorque no hace nada.

Normalmente los destructores se declaran public.

Unidad 6 Estructuras Secuenciales y Selectivas6.1 Entrada y Salida de Datos

Aquí sólo trataremos la entrada/salida que se comunica con el usuario através de la pantalla o de la ventana del terminal.

Los programas necesitan comunicarse con su entorno, tanto para recogerdatos e información que deben procesar, tanto para devolver losresultados obtenidos.

6.1.1 System.out.print() y System.out.println()

Para imprimir en la pantalla se utilizan los métodos System.out.print () y System.out.println (). Son los primeros métodos que aprende cualquier programador. Sus características fundamentales son:

Pueden imprimir valores escritos directamente en el Código 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 métodocorrespondiente utilizando el operador + de concatenación, que equivale aconvertir a String todas las variables que no lo sean y concatenar lascadenas de caracteres (el primer argumento debe ser un String).

System.out.println(“Hola,mundo” + numeroPI);

60

Apuntes de Fundamentos de Programación de Sistemas

Se debe recordar que los objetos System.out y System.err son de la claseprintStream y aunque imprimen las variables de un modo legible, no permitendar a la salida un formato a medida. El programador no puede especificarun 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" enun programa Java.

Para ello, lo primero que debe tenerse presente es que el teclado es laentrada estándar de datos en un PC.

A continuación, debe tenerse en cuenta, que cualquier entrada genérica dedatos a un programa Java, se modela mediante un objeto de la claseabstracta java.io.InputStream.

Se observa que un objeto de esta clase es lo que devuelve la variable decampo estática "in" de la clase java.lang.System. Además, la explicaciónAPI de esta variable nos dice que representa la entrada estándar de datosde un programa Java.

Para la lectura desde el teclado nos auxiliamos de la clase Scanner quese encuentra incluida en el paquete java.util, por lo que es necesarioimportar para poder usar esta clase.

Esta clase ofrece una serie de métodos que, habiendo leído un token, lointentan interpretar como algún tipo primitivo de java:

Métodos para Datos Enteros

Métodos para Datos Reales

Métodos para Booleano

int nextInt() double nextDouble()boolean nextBoolean()

Byte nextByte() float nextFloat()  short nextShort(

)   

Long nextLong()    

Por último cabe mencionar el método String nextLine(), que devuelve loque queda por leer de la línea actual; es decir, desde donde estemoshasta el primer fin de línea. Llamadas consecutivas a nextLine() vanproporcionando líneas sucesivas de texto.

Un ejemplo de su uso sería:

61

Apuntes de Fundamentos de Programación de Sistemas

import java.util.Scanner;public class Lectura { public static void main(String[] args) {      Scanner leer = new Scanner(System.in);      System.out.print("Escriba dos números: ");      double x = leer.nextDouble();      double y = leer.nextDouble();     System.out.println("La suma es: " + (x + y)); }}

Una probable salida al ejecutar el programa anterior sería:Escriba dos números: 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 elambiente en el que se esté trabajando (DOS o en su defecto NetBins),también se pueden generar las salidas utilizando “ventanas” o “cuadros dediálogos”, que viene implementados en modo gràfico.

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 adefinir interfaces gráficas de usuario (GUI). Los componentes GUIfacilitan la entrada de datos por parte del usuario y dar formato opresentar la salida de datos por parte el usuario.

Al utilizar cualquiera de estas herramientas es necesario concluir elprograma con el método Sytem.exit(0);

Las opciones con las que contamos son:

Generar una caja de dialogo que sólo incluya un mensaje.

JOptionPane.showMessageDialog(null,"Cadena_de_salida");

Donde Cadena_de_salida, es lo que se desplegará en la caja de diálogo.

62

Apuntes de Fundamentos de Programación de Sistemas

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

Características de JOptionPane

Utilizando JOptionPane, se pueden crear muchos diálogos. Aquí podemos verunos ejemplos, todos producidos por DialogDemo.

63

Apuntes de Fundamentos de Programación de Sistemas

El siguiente código, tomado de DialogDemo.java, crea dos diálogos Yes/No.El primer diálogo utiliza las palabras del aspecto y comportamiento para los dos botones. El segundo diálogo personaliza las palabras. Con la excepción del cambio de palabras, los diálogos son idénticos. Para personalizar las palabras, el código que crea el segundo diálogo 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!"); }

64

Apuntes de Fundamentos de Programación de Sistemas

...//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 Iconoptions, //the titles of buttonsstring1); //the title of the default button

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

Como podríamos observar en los ejemplos anteriores, JOptionPaneproporciona soporte para mostrar diálogos estándards, proporcionandoiconos, específicando el título y el texto del diálogo, y personalizando

65

Apuntes de Fundamentos de Programación de Sistemas

el texto del botón. Otras características permiten personalizar loscomponentes del diálogo a mostrar y especificar si el diálogo deberíaaparecer en la pantalla. Incluso se puede especificar qué panel deopciones se pone a sí mismo dentro de un frame interno (JInternalFrame)en lugar de un JDialog.

Cuando se crea un JOptionPane, el código específico del aspecto ycomportamiento añade componentes al JOptionPane y determina ladistribución de dichos componentes. La siguiente figura muestra cómo losaspectos y comportamientos más comunes distribuyen un JOptionPane:

icono(si existe) Mensaje

Botones

Para la mayoría de los diálogos modales sencillos, se crea y se muestrael diálogo utilizando uno de los métodos showXxxDialog de JOptionsPane.Para ejemplos de utilización de los siguientes métodos. showMessageDialog Muestra un diálogo modal con un botón, etiquetado "OK". Se puedeespecificar fácilmente el mensaje, el icono y el título que mostrará eldiálogo.

showConfirmDialog Muestra un diálogo modal con dos botones, etiquetados "Yes" y "No". Estasetiquetas no son siempre terriblemente descriptivas con las actionesespecíficas del programa que causan.

showInputDialog Muestra un diálogo modal que obtiene una cadena del usuario. Un diálogo 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 tipoString, ejemplo:

showOptionDialog Muestra un diálogo modal con los botones, los iconos, el mensaje y eltítulo especificado, etc. Con este método, podemos cambiar el texto queaparece en los botones de los diálogos estándard. También podemosrealizar cualquier tipo de personalización.

El soporte de iconos de JOptionPane permite especificar qué iconomostrará el diálogo. Podemos utilizar un icono personalizado, no utilizarninguno, o utilizar uno de los cuatro iconos estándard de JOptionPane (question, information, warning, y error).

66

Apuntes de Fundamentos de Programación de Sistemas

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 acción (instrucción) 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.

En Pseudocódigo una Estructura Secuencial se representa de la siguiente forma:

67

Apuntes de Fundamentos de Programación de Sistemas

Observe el siguiente problema de tipo cotidiano y sus respectivos algoritmos representados en Pseudocódigo y en diagramas de flujos:

• Tengo un teléfono 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 aunas determinadas condiciones.

Operadores Relacionales

Los operadores relacionales se utilizan para comparar el contenido de dos

68

Apuntes de Fundamentos de Programación de Sistemas

variables, donde el resultado será verdadero (un valor diferente de cero)o falso (valor igual a cero).

E seis operadores relacionales básicos:

> 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 más de un operador se evalúan de izquierda a derecha. Además los operadores == y != están por debajo del resto en cuanto al orden de precedencia.

Operadores Lógicos

Los operadores lógicos básicos son:

&& AND|| OR

! NOT (El valor contrario)

Estos operadores actúan sobre expresiones lógicas. Permiten unir expresiones lógicas simples formando otras más complejas.

6.3.1 Estructura if

     Sintaxis: if (condición) sentencia;La sentencia solo se ejecuta si se cumple la condición. En caso contrarioel programa sigue su curso sin ejecutar la sentencia.

Otro formato:

if (condición) sentencia1;else sentencia2;

Nos sirve para evaluar si una condición simple o compuesta es verdadera (distintade cero) o falsa (igual a cero). Para ello utilizaremos dos tipos de formatos. Elprimero es:

if (expresión) sentencia 1;else sentencia 2;

69

Apuntes de Fundamentos de Programación de Sistemas

Y el segundo es:if (expresión){

sentencias;}else{

sentencias;}

Los dos formatos se pueden combinar. Si la expresión es falsa y no ha puestoelse, el programa seguirá su secuencia normal.

Los if también pueden ir anidados en cuyo caso cada else irá asociado al últimoif evaluado.

Existe la posibilidad de utilizar llaves para ejecutar más de una sentencia dentro de la misma condición.

6.3.2 Estructura switch

Esta estructura se suele utilizar en los menús, de manera que según laopción 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 más sentencias sin necesidad de ir entrellaves, ya que se ejecutan todas hasta que se encuentra la sentencia“break”. La variable evaluada sólo puede ser de tipo entero o caracter.default ejecutará las sentencias que incluya, en caso de que la opciónescogida no exista.

Suponiendo que “x” es un dato entero:

switch (x) {

case 1:

70

Apuntes de Fundamentos de Programación de Sistemas

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 (“Otoño”);break;

default:System.out.println (“Error al introducir el número de mes”);

}}

Los switch también se pueden anidar en cuyo caso se coloca el nuevoswitch como tratamiento de una orden case.

switch (expresión) {

case 1:switch (expresión 2) {

case 1:Sentencias;break;

case 2:Sentencias;break;

}break;

case 2:Sentencias;break;

}

Unidad 7 Estructuras de Repetición

71

Apuntes de Fundamentos de Programación de Sistemas

Las estructuras de repetición son las que permiten ejecutar partes del código de forma repetida mientras se cumpla una condición.

Esta condición puede ser simple o compuesta de otras condiciones unidas por operadores lógicos.

7.1 Sentencia while

Su sintaxis es:

while (condición) sentencia;

Con esta sentencia se controla la condición 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 más de una sentencia, éstasdeberán ir entre llaves para que se ejecuten como un bloque.

EJEMPLOS:

INTRODUCIR UN NÚMERO POR TECLADO Y HALLAR SU CUBO. EL PROGRAMA FINALIZA CUANDO SEINTRODUCE –1

int x = 0, r;while (x! = -1)

{System.out.println( “Introduce un número:”); x =in.nextInt();;R = x * x * x;System.out.println( “Su cubo es:” +r);

}

7.2 Sentencia do...while

Su sintaxis es:

do{

sentencia1;sentencia2;

}while (condición);

Con esta sentencia se controla la condición al final del bucle. Si éstase cumple, el programa vuelve a ejecutar las sentencias del bucle.

La única diferencia entre las sentencias while y do...while es que con lasegunda el cuerpo del bucle se ejecutará por lo menos una vez.

72

Apuntes de Fundamentos de Programación de Sistemas

EJEMPLO:

int a;do

{System.out.println( “Introduce un número:”); a =in.nextInt();If (a > 0)

System.out.println( “El número es mayor que cero”);If (a < 0)

System.out.println( “El número es menor que cero”);} while (a! = 0);

7.3 Sentencia for

     Su sintaxis es:

for (inicialización;condición;incremento){

sentencia1;sentencia2;

}

La inicialización indica una variable (variable de control) que condiciona la repetición del bucle. Si hay más, 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 continuación seevalúa la condición planteada, si es verdadera se ejecuta la/ssentencia/s que forman el bucle y finalmente se realiza el incremento.Este proceso se repetirá hasta que deje de cumplirse. Si la condición esfalsa la primera vez el bucle no se ejecutará. Existe la posibilidad deinicializar más de una variable, de utilizar condiciones compuestas, derealizar más de una operación en el incremento e incluso existe laposibilidad de omitir algunos de los parámetros. Si se realiza más de unaoperación en alguno de estos parámetros se separan por comas y si seomite un parámetro se deja vacío.EJEMPLOS:

for (int x = 1; x < 101; x++){

System.out.println(x+”\n”);

73

Apuntes de Fundamentos de Programación de Sistemas

}

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 número:”;);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 ejecución de un bucle o salirde una sentencia switch.

7.5 Sentencia continue

Se utiliza dentro de un bucle. Cuando el programa llega a una sentenciacontinue no ejecuta las líneas de código que hay a continuación y salta ala siguiente iteración del bucle.

74