Professional Documents
Culture Documents
Clases.
Una clase es la unidad básica que encapsula toda la información de un Objeto (un objeto
es una instancia de una clase).
Para crear una clase sólo se necesita un archivo fuente que contenga la palabra clave
reservada class seguida de un identificador legal y un bloque delimitado por dos llaves
para el cuerpo de la clase
class MiPunto
{
…
}
Un archivo de Java debe tener el mismo nombre que la clase que contiene, y se les suele
asignar la extensión ".java". Por ejemplo la clase MiPunto se guardaría en un fichero que
se llamase MiPunto.java. Hay que tener presente que en Java se diferencia entre
mayúsculas y minúsculas; el nombre de la clase y el de archivo fuente han de ser
exactamente iguales.
Aunque la clase MiPunto es sintácticamente correcta, es lo que se viene a llamar una clase
vacía, es decir, una clase que no hace nada. Las clases típicas de Java incluirán variables y
métodos de instancia las cuales mencionaremos en temas posteriores.
Atributos.
Los datos se encapsulan dentro de una clase declarando variables entre las llaves de
apertura y cierre de la declaración de la clase, variables que se conocen como atributos.
Se declaran igual que las variables locales de un método en concreto.
Por ejemplo, este es un programa que declara una clase MiPunto, con dos atributos
enteros
Llamados x e y.
class MiPunto
{
int x, y;
}
Los atributos se pueden declarar con dos clases de tipos: un tipo simple Java, o el nombre
de una clase.
Cuando se realiza una instancia de una clase (creación de un objeto) se reservará en la
memoria un espacio para un conjunto de datos como el que definen los atributos de una
clase. A este conjunto de variables se le denomina variables de instancia.
Métodos.
Los métodos de una clase son funciones ó procedimientos propios de la clase que pueden
tener acceso a los atributos de la misma para realizar las operaciones para los que son
programados.
Cada método recibe ciertos parámetros y retorna su resultado en un dato de cierto tipo,
dependiendo de estos parámetros que recibe el método y el tipo del dato que retorna,
podemos tener métodos con el mismo nombre y serán diferenciados por el tipo de sus
parámetros (polimorfismo).
Los métodos especifican la forma en que se controlan los datos de un objeto. Los métodos
en un tipo de objeto solo hacen referencia a las estructuras de datos de ese tipo de
objeto. No deben tener acceso directo a las estructuras de datos de otros objetos. Para
utilizar la estructura de datos de otro objeto, deben enviar un mensaje a éste. El tipo de
objeto empaca juntos los tipos de datos y los métodos.
En la declaración de los métodos se define el tipo de valor que devuelven y a una lista
formal de parámetros de entrada, de sintaxis tipo identificador separadas por comas. La
forma general de una declaración de método es:
tipo_devuelto nombre_de_método (lista-formal-de-parámetros)
{
cuerpo_del_método;
}
Los métodos son llamados indicando una instancia individual de la clase, que tendrá su
propio conjunto único de variables de instancia, por lo que los métodos se pueden referir
directamente a ellas.
Los seres humanos no pensamos en las cosas como un conjunto de cosas menores; por
ejemplo, no vemos un cuerpo humano como un conjunto de células. Los humanos
entendemos la realidad como objetos con comportamientos bien definidos. No
necesitamos conocer los detalles de porqué, ni cómo funcionan las cosas; simplemente
solicitamos determinadas acciones en espera de una respuesta; cuando una persona
desea desplazarse, su cuerpo le responde comenzando a caminar.
UML introduce nuevos diagramas que representa una visión dinámica del sistema. Es
decir, gracias al diseño de la parte dinámica del sistema podemos darnos cuenta en la fase
de diseño de problemas de la estructura, al propagar errores o de las partes que necesitan
ser sincronizadas, así como del estado de cada una de las instancias en cada momento. En
resumen, un sistema debe estar bien diseñado, pero también debe funcionar bien.
Cualquier investigación se origina en una duda, inquietud o pregunta, sobre un tema que
interese al investigador, o bien porque hay un problema que no puede ser resuelto con los
elementos científicos actuales. Este primer paso no es más que el cuestionamiento a la
existencia de un fenómeno determinado, que consiste en establecer los requisitos. Esto se
aplica tanto a la investigación de primera línea como a programas sencillos y personales,
así como a los esfuerzos realizados por grandes equipos. Cuando se tiene una idea vaga
del objetivo, lo único que se está haciendo es posponer las decisiones a una etapa en la
cual los cambios serán mucho más costosos.
La definición del problema debería indicar lo que hay que hacer, y no cómo hay que
hacerlo. Debe ser una exposición de nuestras necesidades, y no una propuesta de
solución. El solicitante debería indicar qué características son obligatorias, así como las
que sean opcionales, para evitar restringir en demasía las decisiones de diseño y evitar
describir las características internas del sistema, por cuanto esto le resta flexibilidad a la
implementación. Los estándares de ingeniería del software, tal como una construcción
modular, un diseño adecuado para las pruebas, y la previsión de futuras extensiones, son
también adecuados.
El analista debe separar los requisitos verdaderos de las decisiones de diseño y de
implementación disfrazadas de requisitos y atacar a estos pseudorequisitos, porque
restringen la flexibilidad. La definición de un problema puede tener un grado mayor o
menor de detalle. La mayoría de las definiciones de problema son ambiguas, están
incompletas, y no son ni siquiera congruentes. Hay algunos requisitos que están,
simplemente, mal. Algunos de ellos, aun cuando se hayan expuesto con precisión, tendrán
consecuencias desagradables para el comportamiento del sistema, o bien impondrían
unos costes de implementación irracionales. Otros parecen razonables en primera
aproximación, pero no funcionan tan bien como podría pensar el solicitante. La definición
del problema es solamente un punto inicial para comprenderlo, y no un documento
inmutable. El propósito del análisis subsiguiente es comprender en su totalidad el
problema y sus implicaciones. No hay razón para esperar que la definición de problema
que se haya preparado sin un análisis completo sea la correcta.
• Resoluble: la naturaleza del problema debe ser tal, que permita llegar a una solución.
Para resolverlo es preciso analizar los siguientes puntos.
•Los datos o resultados que se esperan.
•Los datos de entrada que nos suministran.
•El proceso al que se requiere someter esos datos a fin de obtener los resultados
esperados.
•Áreas de trabajo, fórmulas y otros recursos necesarios.
Delimitado: para poder llevar a cabo un estudio, hay que saber con precisión hasta donde
se extenderán sus conclusiones, y cuales factores serán tomados en consideración. Un
problema muy amplio o que aborde muchas variables, impide prácticamente su análisis.
Los investigadores han identificado los problemas y sus causas y han desarrollado reglas y
procedimientos para resolverlos. Cada método de análisis tiene una notación y un punto
de vista únicos. Sin embargo, todos los métodos de análisis están relacionados por un
conjunto de principios fundamentales:
2.5 ANALISIS
El análisis es una actividad que engloba la mayoría de las tareas que hemos llamado
colectivamente Ingeniería de sistemas basados en computadora. Este se realiza teniendo
presentes los siguientes objetivos: (1) identificar las necesidades, (2) evaluar la viabilidad
del sistema (3) realizar un análisis técnico (4) asignar funciones, (5) establecer
restricciones de costo y tiempo, (6) crear una definición del sistema que sea la base para
todo el trabajo posterior de la aplicación.
Los objetos son las unidades básicas de construcción, para conceptualización, diseño o
programación, son instancias organizadas en clases con características comunes. Estas
características comprenden los atributos y procedimientos, denominados operaciones o
métodos.
Estos objetos deben estar basados, hasta donde sea posible, en entidades del mundo real
y en conceptos de la aplicación o dominio.
Hay que identificar objetos potenciales que formaran el diseño y es tan fácil como buscar
sustantivos (nombres, cosas). A veces no resulta tan obvio ya que los objetos pueden
manifestarse de diversas maneras:
• Cosas
• Entidades externas (personas, maquinas o incluso otros desarrollos)
• Eventos
• Roles
• Lugares
• Organizaciones (departamento, división)
Debemos delimitar los objetos en un dominio cerrado y ser capaces de identificar lo que
esos objetos son, saben y hacen. Partiendo de la identificación de objetos se puede ir
desarrollando un diseño de clases usando símbolos o lenguajes unificados.
Para identificar objetos y clases es necesario realizar la aplicación de los siguientes pasos:
• Seleccionar nombres en los requisitos
• Añadir clases adicionales procedentes de nuestro conocimiento del tema
• Eliminar redundancias
• Eliminar clases irrelevantes
• Eliminar clases vagas
• Separar atributos
• Separar métodos
• Eliminar objetos de diseño
El resultado de identificar correctamente los objetos y las clases para una aplicación, nos
llevará más fácil a la solución del problema.
Los atributos derivados deben ser omitidos o bien deben ser marcados claramente. Por
ejemplo, edad se ha derivado de fecha de nacimiento y de fecha actual (que es una
propiedad del entorno). Los atributos derivados, pueden resultar útiles para abstraer
propiedades significativas de una aplicación, pero deberían distinguirse claramente de los
atributos básicos, que definen el estado del objeto. Los atributos derivados no deben
expresarse como operaciones, tal como preguntar-edad, aun cuando eventualmente
puedan llegar a implementarse de esta manera.
Hay que eliminar los atributos innecesarios e incorrectos mediante los criterios siguientes:
• Nombres. Los nombres suelen modelarse mejor como cualificadores que como atributos
de objeto. Comprobación: ¿Selecciona el nombre uno de los objetos de un conjunto?
¿Puede un objeto del conjunto tener más de un nombre? En caso afirmativo, el nombre
cualifica a una asociación. Si el nombre parece ser único, quizá hayamos pasado por alto la
clase de objetos que está siendo cualificada. Por ejemplo, nombre de departamento
puede ser algo único dentro de una compañía aunque eventualmente es posible que el
programa necesite tratar con más de una compañía.
• Detalles finos. Omita aquellos atributos menores que tengan pocas probabilidades de
afectar a la mayoría de las operaciones.
Los métodos son subrutinas que definen la interfaz de una clase, sus capacidades y
comportamiento. Un método ha de tener por nombre cualquier identificador legal distinto
de los ya utilizados por los nombres de la clase en que está definido. Los métodos se
declaran al mismo nivel que las variables de instancia dentro de una definición de clase.
Los métodos permiten al programador modularizar sus programas. Todas las variables
declaradas en las definiciones de métodos son variables locales: sólo se conocen en el
método en el que se definen. Casi todos los métodos tienen una lista de parámetros que
permiten comunicar información entre métodos. Los parámetros de un método también
son variables locales.
Hay varios motivos para modularizar los programas con métodos. El enfoque de "divide y
vencerás" hace más manejable la tarea de desarrollo de los programas. Otra motivación
es la reutilidad del software: usar métodos ya existentes para crear programas nuevos. Si
nombramos y definimos métodos adecuadamente, podremos crear programas a partir de
métodos estandarizados, en lugar de construirlos empleando código escrito
especialmente para la tarea.
Para identificar y depurar los métodos de un objeto es necesario aplicarlos los siguientes
pasos:
• Seleccionar verbos relacionales en los requisitos
• Añadir relaciones adicionales procedentes de nuestro conocimiento del tema
• Eliminar relaciones de diseño o entre clases eliminadas
• Eliminar eventos transitorios
• Reducir relaciones ternarias
• Eliminar relaciones redundantes o derivadas
• Añadir relaciones olvidadas
• Definir la multiplicidad de cada relación
2.6.1 Representación
Representación Grafica De Una Clase
El objetivo básico de un gráfico es transmitir la información de forma tal que pueda ser
captada rápidamente, de un golpe de vista. Luego, un gráfico debe ser ante todo sencillo y
claro, a pesar de su aspecto artístico, ya que se elabora para ser incluido en un trabajo
científico.
Encontramos muy útil representar de forma grafica los objetos que conforman nuestra
aplicación, cada clase se representa por una caja en la que se realizan tres divisiones.
• En la superior se especifica el nombre del objeto.
• En la intermedia se incluyen las propiedades del objeto.
• En la inferior se indican las operaciones que realiza el objeto
Diagrama de Clases.
En el diagrama de clases definiremos las características de cada una de las clases,
interfaces, colaboraciones y relaciones de dependencia y generalización. Es decir, es
donde daremos rienda suelta a nuestros conocimientos de diseño orientado a objetos,
definiendo las clases e implementando las ya típicas relaciones de herencia y agregación.
La Clase.
Una clase esta representada por un rectángulo que dispone de tres apartados, el primero
para indicar el nombre, el segundo para los atributos y el tercero para los métodos. Cada
clase debe tener un nombre único, que las diferencie de las otras.
Un atributo representa alguna propiedad de la clase que se encuentra en todas las
instancias de la clase. Los atributos pueden representarse solo mostrando su nombre,
mostrando su nombre y su tipo, e incluso su valor por defecto.
Un método u operación es la implementación de un servicio de la clase, que muestra un
comportamiento común a todos los objetos. En resumen es una función que le indica a las
instancias de la clase que hagan algo.
Existen tres relaciones diferentes entre clases, Dependencias, Generalización y Asociación.
En las relaciones se habla de una clase destino y de una clase origen. Una clase origen es
desde la que se realiza la acción de relacionar. Es decir desde la que parte la flecha, y la
clase destino es la que recibe la flecha.
Diagrama Objetos.
El Diagrama de Objetos forma parte de la vista estática del sistema, en éste se modelan las
instancias de las clases del diagrama de clases. Muestra a los objetos y sus relaciones,
pero en un momento concreto del sistema. Estos diagramas contienen objetos y enlaces;
también se pueden incorporar clases, para mostrar la clase de la que es un objeto
representado.
Para realizar el diagrama de objetos primero se debe decidir que situación queremos
representar del sistema.
Un objeto se puede ver desde dos perspectivas relacionadas: como una entidad de un
determinado instante de tiempo que posee un valor específico (Un objeto puede
caracterizar una entidad física -coche-) y como un poseedor de identidad que tiene
distintos valores a lo largo del tiempo (abstracta -ecuación matemática-).
Cada objeto posee su propia identidad exclusiva y se puede hacer referencia a él mediante
una denominación exclusiva que permite accederle. El Modelado de Objetos permite
representar el ciclo de vida de los objetos a través de sus interacciones. En UML, un objeto
se representa por un rectángulo con un nombre subrayado.
Diagramas de componentes
Un diagrama de componentes muestra la organización y las dependencias entre un
conjunto de componentes. No es necesario que un diagrama incluya todos los
componentes del sistema, normalmente se realizan por partes. Cada diagrama describe
un apartado del sistema En el situaremos librerías, tablas archivos, ejecutables y
documentos que formen parte del sistema.
Uno de los usos principales es que puede servir para ver que componentes pueden
compartirse entre sistemas o entre diferentes partes de un sistema.
Diagramas de despliegue
En el diagrama de despliegue se indica la situación física de los componentes lógicos
desarrollados. Es decir se sitúa el software en el hardware que lo contiene. Cada Hardware
se representa como un nodo.
Diagramas de Secuencia
En el diagrama de secuencia se muestra el orden de las llamadas en el sistema. Se utiliza
un diagrama para cada llamada a representar. Es imposible representar en un solo
diagrama de secuencia todas las secuencias posibles del sistema, por ello se escoge un
punto de partida. El diagrama se forma con los objetos que forman parte de la secuencia,
estos se sitúan en la parte superior de la pantalla, normalmente en la izquierda se sitúa al
que inicia la acción. De estos objetos sale una línea que indica su vida en el sistema. Esta
línea simple se convierte en una línea gruesa cuando representa que el objeto tiene el
foco del sistema, es decir cuando él esta activo.
Diagrama de Actividades
Un diagrama de actividades es provechoso para entender el comportamiento de alto nivel
de la ejecución de un sistema, sin profundizar en los detalles internos de los mensajes. Los
parámetros de entrada y salida de una acción se pueden mostrar usando las relaciones de
flujo que conectan la acción y un estado de flujo de objeto.
Un diagramas de estado representa la secuencia de estados por los que un objeto o una
interacción entre objetos pasa durante su tiempo de vida en respuesta a estímulos
(eventos) recibidos.
La elaboración de un diagrama de estados para que las clases de objetos tengan un
comportamiento dinámico no trivial, deberá mostrar los sucesos enviados y recibidos por
el objeto. Cada rama del flujo de control es representada por un estado con más de una
transición de salida.
Un estado identifica un periodo de tiempo del objeto (no instantáneo) en el cual el objeto
está esperando alguna operación, tiene cierto estado característico o puede recibir cierto
tipo de estímulos. Se representa mediante un rectángulo con los bordes redondeados,
que puede tener tres compartimientos: uno para el nombre, otro para el valor
característico de los atributos del objeto en ese estado y otro para las acciones que se
realizan al entrar, salir o estar en un estado (entry, exit o do, respectivamente)