Академический Документы
Профессиональный Документы
Культура Документы
ndice
1. Introduccin
2. Tecnologa orientada a objetos
1. Una Perspectiva Histrica
2. Cules son las ventajas de un lenguaje orientado a objetos?
3. El modelo orientado a objetos
1. objetos
2. clases
3. Herencia
4. Envo de mensajes
4. Caractersticas asociadas a la POO
1. Abstraccin
2. Encapsulamiento
3. Ocultamiento
4. Modularidad
5. Polimorfismo
5. Lenguajes de programacin orientado a objetos
6. Anlisis y diseo orientado a objetos
7. Resumen
Introduccin
objetos
clases
Herencia
Envo de mensajes
1. Objetos
Que tiene que ver esto con la programacin? La programacion orientada a objetos
trabaja de esta manera. Todo el programa est construido en base a diferentes
componentes (objetos), cada uno tiene un rol especfico en el programa y todos
los componentes pueden comunicarse entre ellos de formas predefinidas.
Por ejemplo, los automviles tienen caractersticas (marca, modelo, color, velocidad
mxima, etc.) y comportamiento (frenar, acelerar, retroceder, llenar combustible,
cambiar llantas, etc.).
Los objetos de Software, al igual que los objetos del mundo real, tambin tienen
caractersticas y comportamientos. Un objeto de software mantiene sus
caractersticas en una o ms "variables", e implementa su comportamiento con
"mtodos". Un mtodo es una funcin o subrutina asociada a un objeto.
Para redondear estas ideas, imaginemos que tenemos estacionado en nuestra
cochera un Ford Focus color azul que corre hasta 260 km/h. Si pasamos ese objeto
del mundo real al mundo del software, tendremos un objeto Automvil con sus
caractersticas predeterminadas:
Marca=Ford
Modelo=Focus
Color=Azul
Velocidad Mxima = 260 km/h
Cuando a las caractersticas del objeto le ponemos valores decimos que el objeto
tiene estados. Las variables almacenan los estados de un objeto en un
determinado momento.
2. Las clases
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por
ejemplo, nuestro telfono celular es slo uno de los miles que hay en el mundo. Si
hablamos en trminos de la programacin orientada a objetos, podemos decir
que nuestro objeto celular es una instancia de una clase conocida como "celular".
Los celulares tienen caractersticas (marca, modelo, sistema operativo, pantalla,
teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes
multimedia, transmisin de datos, etc.).
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los
celulares comparten esas caractersticas comunes y construyen modelos o
plantillas comunes, para que a partir de esas se puedan crear muchos equipos
celulares del mismo modelo. A ese modelo o plantilla le llamamos clase, y a los
equipos que sacamos a partir de ella la llamamos objetos.
Esto mismo se aplica a los objetos de software, se puede tener muchos objetos del
mismo tipo y mismas caractersticas.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En
realidad, no existe diferencia entre un objeto y una instancia. Slo que el objeto es
un trmino ms general, pero los objetos y las instancias son ambas
representaciones de una clase.
Definicin Terica: Una instancia es un objeto de una clase en particular.
3. Herencia
Por ejemplo, imaginemos que estamos haciendo el anlisis de un Sistema para una
tienda que vende y repara equipos celulares.
En general, podemos tener una gran jerarqua de clases tal y como vemos en el
siguiente grfico:
4. Envo de Mensajes
Un objeto es intil si est aislado. El medio empleado para que un objeto interacte
con otro son los mensajes. Hablando en trminos un poco ms tcnicos, los
mensajes son invocaciones a los mtodos de los objetos.
Abstraccin
Public-class-Automovil{
//variables
//mtodos
}
Encapsulamiento
Ocultamiento
Modularidad
Polimorfismo
En 1995 apareci el ms reciente lenguaje OO, Java desarrollado por SUN, que
hereda conceptos de C++.
Segn los mismos diseadores del lenguaje UML, ste tiene como fin modelar
cualquier tipo de sistemas (no solamente de software) usando los conceptos de la
orientacin a objetos. Y adems, este lenguaje debe ser entendible para los
humanos y mquinas.
El UML consta de todos los elementos y diagramas que permiten modelar los
sistemas en base al paradigma orientado a objetos. Los modelos orientados a
objetos cuando se construyen en forma correcta, son fciles de comunicar, cambiar,
expandir, validar y verificar. Este modelamiento en UML es flexible al cambio y
permite crear componentes plenamente reutilizables.
Resumen
Historia de la Programacin
Por desgracia, los avances tecnolgicos suelen producirse gracias a los militares
que se aprovechan de la ciencia para perfeccionar sus armas. En la Moore School
de la Universidad de Pensilvania se estaba trabajando en un proyecto militar para
realizar unas tablas de tiro para armas balsticas. Los clculos eran enormes y se
tardaban semanas en realizarlos. Parece ser que John W. Mauchly (1907-1980),
quien diriga el departamento de fsica del Ursine College de Filadelfia vivi en casa
de Atanasoff durante cuatro das a partir del 13 de Junio de 1941, lo que
seguramente aprovech para conocer las ideas de Atanasoff.
Un objeto se puede ver como una "cpsula" de datos y algoritmos que trabajan
sobre esos datos. Un objeto no puede acceder directamente a sus datos (atributos).
Los atributos son slo accesibles desde la implementacin de los mtodos de una
clase. Un objeto no puede "manipular" sus propios datos, para ello estn los
mtodos de la clase de dicho objeto: el comportamiento (mtodos) de un objeto
puede variar el valor (estado) de sus datos (atributos). Por ejemplo, nunca debemos
hacer lo siguiente: miCoche.color := 'rojo'. Para esto definiremos mtodos que
actualicen el valor de los atributos de un objeto, por ejemplo:
miCoche.ponerColor('rojo').
Los objetos "se declararn" como atributos de las clases, en las clasulas var de los
mtodos o en la lista de parmetros de los mtodos. El nico objeto que debe ser
"declarado" en el programa principal ser el de la clase raz de toda la jerarqua de
clases (por cuestiones del lenguaje Pascal orientado a objetos). Los objetos
estticos existen durante la ejecucin del programa. Los objetos dinmicos existen
mientras no sean destruidos (liberacin de la memoria del objeto), mediante la
sentencia dispose.
Tras ser instanciado, un objeto consta de los atributos de la clase a la que pertenece,
y puede recibir mensajes. Dicho objeto determinar a qu mtodo de su clase
corresponde dicho mensaje. Un objeto no podr recibir mensajes correspondientes
a mtodos de una clase a la qe no pertenezca. Por ejemplo:
La Clase
Una clase se divide en una parte pblica y en una parte privada. El nombre de la
clase debe ser nico. Antes de continuar, recordar cmo era una librera (UNIT) en
Pascal. Tiene una parte donde se declaran las cabeceras de los subprogramas
(ineterface) que prodrn usarse desde los ficheros que usen la librera, y otra parte
donde se implementan dichos subprogramas (implementation).
Parte pblica
Parte privada
Describe los datos de la clase y cmo las operaciones manipulan dichos datos. Esta
parte de la clase es donde se oculta (encapsula) la informacin de la clase: datos e
implementacin de mtodos declarados o no en la parte pblica de la clase. Es una
parte "no visible", cada objeto de una determinada clase tiene sus atributos (datos)
y sus mtodos.
Abstraccin
La herencia nos permite definir una jerarqua en la que existirn clases padre y
clases hijo, pudindo ser una clase padre de otra clase, e hijo de otra clase a la
vez. No deben definirse jerarquas de herencia en la que una clase sea padre e hijo
de la misma clase. Existen 2 tipos de herencia: La herencia simple y la herencia
mltiple. En la herencia simple una clase slo puede tener una clase padre, en la
herencia mltiple, una clase puede tener ms de una clase padre. Por ejemplo:
Clase abstracta
Redefinicin de mtodos
Una clase hija de una clase abstracta puede redefinir los mtodos diferidos de su
clase padre abstracta.
Nota: Una clase hija de una clase abstracta no tiene porqu redefinir los
mtodos diferidos de la clase padre, podra ser una clase nieta de la clase
abstracta la que hiciera la redefinicin. Lo que es obligatorio es redefinir un
mtodo diferido en alguna clase descendiente de una clase abstracta.
El mtodo debe redefinirse con los mismos parmetros que el mtodo diferido, de
lo contrario se estara definiendo otro mtodo (sobrecarga). Es aqu donde aparece
el concepto de super. Esta palabra reservada hace referencia a un mtodo
perteneciente a la clase padre de la clase del objeto en cuestin.
Polimorfismo
Concepto de polimorfismo
La clase forma define los mtodos dibujar y borrar. En la definicin de estos mtodos
se implementar el cdigo comn a todos los objetos de la clase. Sin embargo
cuando definamos las clases hijas, crculo y cuadrado, ser necesario modificar
estos mtodos para adaptarlos a las nuevas subclases. El mtodo de la clase padre
implementa aquellas acciones comunes. Las clases hijas aaden las operaciones
particulares que necesiten. Cuando utilicemos los mtodos de la clase forma no
tendremos que hacer distincin entre cuadrados y crculos. Gracias al polimorfismo
se ejecutar el mtodo adecuado en funcin de la subclase a la que pertenezca el
objeto.
En la declaracin de una clase estamos definiendo el conjunto de mtodos y
campos que son accesibles desde fuera de una clase o lo que a menudo se
denomina contrato de la clase. Este contrato determina cual va a ser la
funcionalidad de la clase. Pero cuando extendemos una clase para crear otra
estamos ampliando este contrato aadiendo mas funcionalidades. Por tanto cuando
creamos esa nueva clase hacemos uso de dos mecanismos. Por un lado la
herencia para reutilizar las partes comunes de la super-clase. Y por otro el
polimorfismo, es decir el cambio en la forma en la que se implementa el contrato
de la superclase. Como vemos al escribir una subclase podemos sobreescribir el
contrato aadiendo nuevas funcionalidades, pero no cambiarlo.
Simula (1967) es aceptado como el primer lenguaje que posee las caractersticas
principales de un lenguaje orientado a objetos. Fue creado para hacer programas
de simulacin, en donde los "objetos" son la representacin de la informacin ms
importante. Smalltalk (1972 a 1980) es posiblemente el ejemplo cannico, y con el
que gran parte de la teora de la programacin orientada a objetos se ha
desarrollado.
ABAP
ActionScript
ActionScript 3
Ada
C++
C#
Clarion
Clipper (lenguaje de programacin) (Versin 5.x con librera de objetos
Class(y))
Gambas
Harbour
Eiffel
Java
Objective-C
Ocaml
Oz
PowerBuilder
Python
Ruby
Magik (SmallWorld)
Vala
VB.NET
Visual Objects
XBase++
Lenguaje DRP
Introduccin a Java
Aunque los inicios de Java se remontan a 1991, fecha en la que los ingenieros de
Sun Microsystems trataban de disear un lenguaje de programacin para
electrodomsticos, Java se introduce como lenguaje de programacin a finales de
1995.
Java Runtime Environment (JRE): se trata de una versin reducida del JDK
destinada nicamente a la ejecucin de cdigo Java.
HolaMundo.java
El nico parmetro del mtodo main es un vector de objetos String que son los
argumentos con los que se invocar al programa desde la lnea de rdenes. void
indica que el mtodo main no devuelve ningn valor.
La nica sentencia que contiene el mtodo main invoca al mtodo println en el objeto
out de la clase System. Esta sentencia imprime una cadena con terminacin de salto
de lnea en el flujo de salida estndar.
Encapsulamiento en Java
Imaginemos que se crea una clase, una docena de programadores tienen acceso a
dicha clase y la utilizan a discrecin, posteriormente dicha clase comienza a
comportarse de una manera inesperada debido a que los valores que algunas
variables han tomado no fueron anticipados y todo comienza a desmoronarse. Para
corregir el problema se crea una versin ms nueva de dicha clase y listo.
Analizando el cdigo anterior podemos darnos cuenta de que las variables enteras
tipo y clase son pblicas y pueden ser accedidas directamente a travs de una
instancia de la clase MiClase, esto compila sin ningn problema, digamos que es
'legal', sin embargo, qu pasa si ingresamos un valor que no se supone debe de
tener una variable (en este caso el -5 que le asignamos a tipo)?, simplemente no
hay nada que nos detenga para hacerlo. La nica manera de proteger el cdigo es
escribiendo un mtodo que nos permita regular los valores que cada variable puede
tener y escondiendo las variables para que no se pueda acceder a ellas de manera
directa, esto es el principio bsico de encapsulamiento.
2. Hacer mtodos de acceso pblicos para forzar al acceso a las variables por
medio de dichos mtodos en lugar de acceder directamente.
3. Utilizar las convenciones de cdigo para los nombres de los mtodos, p. ej.,
set y get.
Los argumentos del array de cadenas son los "argumentos de la clase". El programa
imprimira por pantalla estos argumentos. As para realizar una posible ejecucin de
la aplicacin escribiramos en la lnea de comandos:
Un programa java est compuesto por una serie de sentencias. Las dos sentencias
bsicas en el lenguaje Java se reflejan en la siguiente tabla:
sentencias de que son las que hemos estudiado para declarar variables
declaracin y constantes.
Sentencias de control
Estas ltimas son las que controlan el flujo de ejecucin del programa.
Normalmente el orden de ejecucin de sentencias es el mismo en el que estn
escritas. Sin embargo, las sentencias de control de flujo introducen bifurcaciones
en la ejecucin del programa. A continuacin estudiaremos en detalle cada uno de
los tipos de sentencias.
if-else
La sentencia if-else nos permite elegir entre dos alternativas de flujo diferentes. La
ejecucin del programa depender del resultado de evaluar la expresin booleana,
switch
La sentencia switch selecciona entre un grupo de sentencias en funcin de la
evaluacin de una expresin. Su formato sera:
Todas las etiquetas case deben ser expresiones constantes, es decir, literales o
identificadores declarados como static final e inicializados con un valor constante.
for
Lo habitual es usar for cuando queremos recorrer todo un rango de valores de una
variable. De esta forma, expresion_inicial indica el punto de partida para hacer
iteraciones, expresion_incremento cmo se va a ir incrementando la variable y
expresion_booleana expresa que condicin debe cumplirse para que el bucle for
acabe.
while y do-while
break y continue
La sentencia break provoca la salida inmediata del bucle que estemos ejecutando,
sin realizar la ejecucin del resto de las sentencias. La sentencia break se puede
usar tanto en bucles como en bifurcaciones. El siguiente uso de break en el bucle
while nos garantiza que j no ser nunca negativo, pues en ese caso romper el
bucle y continuar con la ejecucin normal:
return
La sentencia return termina la ejecucin de un mtodo y devuelve al invocador el
control de flujo del programa. En el caso de que la funcin devuelva alguna
variable, este valor se deber poner a continuacin del return, return <valor>. El
siguiente ejemplo nos ensea un uso de la sentencia return para determinar si un
nmero es positivo:
EsPositivo.java
Vimos como los elementos principales de una clase son sus atributos (datos) y sus
mtodos (cdigo para manipular los datos). Veamos una clase simple, Publicacion
que podramos utilizar para almacenar los datos sobre nuestra coleccin
bibliogrfica:
El nombre de la clase, Publicacion debe ser un identificador vlido en Java y por
convencin, empieza por letra mayscula. Una declaracin de clase crea un nombre
de tipo en Java. De esta forma las referencias a objetos Publicacion se pueden
declarar con un simple:
Las variables de una clase se llaman campos. La clase Publicacion tiene tres
campos, idPublicacion que identifica de forma unvoca cada publicacin, titulo que
es el ttulo de la publicacin y autor que ha firmado la publicacin.
Mtodo Descripcin
La propia clase, las subclases y todas las clases dentro del mismo
protected paquete tienen acceso a los miembros calificados con este mtodo de
acceso.
public Todas las clases tienen acceso a los miembros pblicos de la clase.
Slo las clases del mismo paquete que la clase tienen acceso a los
package
miembros
Hay ocasiones en las que resulta til referirse al objeto desde el que se est
ejecutando un mtodo. En esas ocasiones se puede usar la referencia especial de
objeto this, pero cuidado, siempre dentro de un mtodo no esttico.
Esta referencia se suele usar para pasar una referencia al objeto actual como un
parmetro para otros mtodos. La siguiente llamada aadira el objeto a una
relacin de publicaciones prestadas:
Se usa this cuando un atributo est oculto por una declaracin de variable o
parmetro. Por ejemplo:
En el segundo constructor titulo y autor estn ocultos por los parmetros con el
mismo nombre. Para garantizar que accedemos al campo adecuado en lugar de al
parmetro del mtodo, le colocamos el prefijo this
Clases en Java de Utilidad
Las clases de utilidad son estructuras de datos, es decir, estructuras que nos sirven
para la organizacin de los datos. En este apartado veremos las ms comunes que
nos servirn, en las siguientes lecciones, para poder crear estructuras ms
complejas.
Array
int vector[];
int[] vector;
Los vectores en Java se tratan como objetos de una clase predefinida. Los arrays
pueden asignarse a objetos de la clase Object y los mtodos de Object pueden
utilizarse con vectores. Por tanto deben crearse llamando a un constructor con new,
aunque el constructor tenga una sintaxis totalmente distinta a la estudiada hasta
ahora:
Tambin se pueden inicializar con valores entre llaves separados por comas:
Vectores.java
Conviene recordar que los vectores son objetos porque, a la hora de pasar
argumentos a una funcin, se pasarn por referencia.
Mtodos de Clase
referencia.metodo (parametros);
Sobrecarga de mtodos
Cada mtodo tiene una "firma" por as decirlo, que son su nombre, el tipo y nmero
de sus parmetros. Existe una caracterstica para tener dos mtodos (
constructores) con el mismo nombre. Esta caracterstica se denominasobrecarga
de mtodos.
Se trata de dos estructuras muy similares, pero no es esto lo que nos sugiere la
existencia de un patrn. Sino el papel que juegan estas estructuras en el diseo. Y,
en efecto, dicho papel se repite en ambos casos:
Hemos dado con un patrn de diseo, se trata de una idea: un objeto que almacena
otros objetos, y stos ltimos no tienen sentido sin su "almacn". Se trata del patrn
"Continente-Contenido":
El Patrn Proxy
Un proceso no tiene porqu estar siempre en ejecucin. Puede pasar por diferentes
estados:
No es necesario que se cumplan todos los pasos, por ejemplo, podra ser que un
proceso hiciera los pasos 1-2-6.
Sistema Monoprocesador
Sistema Multiprocesador
Sistema de Multiprogramacin
Sistema de Multiprocesamiento
Hace unos aos, cuando todava no existan los entornos grficos, ni el hardware
que los soportara, todo se haca en un entorno de consola. Al abrir una ventana
de msdos en windows, o una consola de comandos en unix... entran escalofros
slo de pensar que las cosas eran antes "tan fras". Eso si, no se colgaban de vez
en cuando sin saber porqu. Primero Apple copiando de Xerox, y despus Microsoft
copiando de Apple, crearon los entornos visuales, con lo que vino la revolucin
multimedia y se dispar el negocio de la informtica. Dichos entornos visuales
constan de una interfaz grfica "ms amigable", adems de ofrecernos un amplio
abanico de posibilidades. No hay que creer que los entornos multitarea aparecieron
con lo entornos visuales en los que se puede "tener abiertas muchas ventanitas".
UNIX siempre ha sido multitarea, desde sus inicios en modo consola.
Ahora vamos a hacer un pequeo repaso de las arquitecturas existentes dentro del
mundo de la informtica. Cuando en los aos 60 se empezaron a comercializar los
ordenadores, disponibles slo para empresas debido a su alto coste, se utilizaban
sistemas centralizados o mainframes, que tenan diferentes consolas para dar
acceso a mltiples usuarios. Todo el trabajo lo realizaba el mainframe. En los aos
80 surgi el PC, con un precio ms asequible. Nacieron los sistemas en red que
permiten interconectar ordenadores de diferentes caractersticas compartiendo
recursos. El siguiente paso fueron los sistemas distribuidos en los que hay
diferentes estaciones interconectadas, aunque el usuario no necesita conocer su
ubicacin, como sucede en los sistemas en red. El acceso a los recursos es
transparente, es decir, se accede a los recursos como si fueran locales, aunque no
lo sean. Tambin existen sistemas paralelos, que constan de varios procesadores
operando conjuntamente.
Cuando un cliente Web, como un navegador, comunica con una aplicacin J2EE, lo
hace a travs de objetos del lado del servidor llamados componentes Web. Hay
dos tipos de componentes Web: Java Servlets y pginas JavaServer Pages
(JSP). Los servlets son las clases Java que procesan dinmicamente las
solicitudes y construyen las respuestas. Las pginas JSP son documentos basados
en texto que ejecutan Servlets pero permiten una forma ms natural de crear
contenido esttico.
Aunque los Servlets y las pginas JSP pueden usarse indistintamente, cada uno
tiene sus propios puntos fuertes:
Los servlets son mejores para manejar las funciones de control de una
aplicacin, como despachar solicitudes, y manejar datos que no sean texto.
Las pginas JSP son ms apropiadas para generar marcas basadas en texto
como HTML, SVG, WML, y XML.
La porcin del lado del servidor de un cliente Web consta de componentes Web,
ficheros de recursos estticos como imgenes, y clases y libreras de ayuda. La
plataforma J2EE proporciona muchos servicios de soporte que mejoran las
capacidades de los componentes Web y hacen ms fcil su despliegue. Sin
embargo, como debe tener en cuenta estos servicios, el proceso de creacin y
ejecucin de un cliente Web es diferente de las tradicionales clases Java
independientes.
Antes de poder ser ejecutado, un cliente Web debe ser empaquetado en un archivo
de aplicacin Web (WAR), que es un JAR similar al paquete usado para las libreras
de clases Java, y debe ser instalado (o desplegado) en un contenedor Web.
Ciertos aspectos del comportamiento de un cliente Web se pueden configurar
durante su despliegue. La informacin de configuracin se mantiene en un fichero
de texto en formato XML llamado "Descriptor de Despliegue de una Aplicacin
Web" (cuyo nombre real es web.xml). Cuando se crean componentes y clientes
Web usando la utilidad deploytool del J2EE SDK, automticamente genera o
actualiza el descriptor de despliegue basndose en los datos que se introducen en
los "magos" (wizards) e inspectores de deploytool. Tambin podemos crear
manualmente un descriptor de despliegue segn el esquema descrito en la
Especificacin Java Servlet.
3. Desplegar la aplicacin.
Clases de utilidad del lado del cliente (beans de bases de datos, tarjetas de
compra, etc.). Frecuentemente estas clases cumplen la especificacin de la
arquitectura de componentes JavaBeans.
Una aplicacin Web se puede ejecutar desde un fichero WAR o desde un directorio
de distribucin desempaquetada en el mismo formato que un WAR.
classes: Un directorio que contiene las clases del lado del servidor: servlets, clases
de utilidad, y componentes JavaBeans.
lib: Un directorio que contiene los archivos JAR o libreras (libreras de etiquetas y
libreras de clases de utilidad llamadas por las clases del lado del servidor).
Servlet en Java
Los Servlets son las respuesta de la tecnologa Java a la programacin CGI. Son
programas que se ejecutan en un servidor Web y construyen pginas Web.
Construir pginas Web al vuelo es til (y comnmente usado) por un nmero de
razones:
La pgina Web est basada en datos enviados por el usuario. Por ejemplo, las
pginas de resultados de los motores de bsqueda se generan de esta forma, y los
programas que procesan pedidos desde sitios de comercio electrnico tambin.
Las pginas Web que usan informacin desde bases de datos corporativas u
otras fuentes. Por ejemplo, usaramos esto para hacer una pgina Web en una
tienda on-line que liste los precios actuales y el nmero de artculos en stock.
Cules son las Ventajas de los Servlets sobre el CGI Tradicional?
Eficiencia. Con CGI tradicional, se arranca un nuevo proceso para cada solicitud
HTTP. Si el programa CGI hace una operacin relativamente rpida, la sobrecarga
del proceso de arrancada puede dominar el tiempo de ejecucin. Con los Servlets,
la mquina Virtual Java permanece arrancada, y cada peticin es manejada por un
thread Java de peso ligero, no un pesado proceso del sistema operativo. De forma
similar, en CGI tradicional, si hay N peticiones simultneas para el mismo programa
CGI, el cdigo de este problema se cargar N veces en memoria. Sin embargo, con
los Servlets, hay N threads pero slo una copia de la clase Servlet. Los Servelts
tambin tienen ms alternativas que los programas normales CGI para
optimizaciones como los cachs de clculos previos, mantener abiertas las
conexiones de bases de datos, etc.
Potencia. Los Servlets Java nos permiten fcilmente hacer muchas cosas que son
difciles o imposibles con CGI normal. Por algo, los servlets pueden hablar
directamente con el servidor Web. Esto simplifica las operaciones que se necesitan
para buscar imgenes y otros datos almacenados en situaciones estndares. Los
Servlets tambin pueden compartir los datos entre ellos, haciendo las cosas tiles
como almacenes de conexiones a bases de datos fciles de implementar. Tambin
pueden mantener informacin de solicitud en solicitud, simplificando cosas como
seguimiento de sesin y el cach de clculos anteriores.
Portable. Los Servlets estn escritos en Java y siguen un API bien estandarizado.
Consecuentemente, los servlets escritos, digamos en el servidor I-Planet Enterprise,
se pueden ejecutar sin modificarse en Apache, Microsoft IIS, o WebStar. Los
Servlets estn soportados directamente o mediante plug-in en la mayora de los
servidores Web.
Barato. Hay un nmero de servidores Web gratuitos o muy baratos que son buenos
para el uso "personal" o el uso en sitios Web de bajo nivel. Sin embargo, con la
excepcin de Apache, que es gratuito, la mayora de los servidores Web
comerciales son relativamente caros. Una vez que tengamos un servidor Web, no
importa el coste del servidor, aadirle soporte para Servlets (si no viene
preconfigurado para soportarlos) es gratuito o muy barato.
Qu es JSP?
Java Server Pages (JSP) es una tecnologa que nos permite mezclar HTML esttico
con HTML generado dinmicamente. Muchas pginas Web que estn construidas
con programas CGI son casi estticas, con la parte dinmica limitada a muy pocas
localizaciones. Pero muchas variaciones CGI, incluyendo los servlets, hacen que
generemos la pgina completa mediante nuestro programa, incluso aunque la
mayora de ella sea siempre lo mismo. JSP nos permite crear dos partes de forma
separada. Aqu tenemos un ejemplo:
Cules son las Ventajas de JSP?
Adems del HTML normal, hay tres tipos de construcciones JSP que embeberemos
en una pgina JSP: elementos de script, directivas y acciones. Los elementos de
script nos permiten especificar cdigo Java que se convertir en parte del servlet
resultante, las directivas nos permiten controlar la estructura general del servlet, y
las acciones nos permiten especificar componentes que deberan ser usados, y de
otro modo controlar el comportamiento del motor JSP. Para simplificar los elementos
de script, tenemos acceso a un nmero de variables predefinidas como request del
fragmento de cdigo anterior.
La nica excepcin a la regla de que "la plantilla de texto se pasa tal y como es" es
que, si queremos tener "<%" en la salida, necesitamos poner "<\%" en la plantilla de
texto.
JavaBeans Enterprise
El Contenedor EJB
El contenedor asla el bean enterprise del acceso directo desde las aplicaciones
clientes. Cuando una aplicacin cliente llama a un mtodo remoto de un bean
enterprise, el contenedor primero intercepta la llamada para asegurarse de que la
persistencia, las transacciones, y la seguridad se aplican apropiadamente para cada
operacin que realice el cliente sobre el bean. El contenedor maneja todo esto
automticamente por el bean, para que el desarrollador de beans no tenga que
escribir este tipo de lgica en el propio cdigo del bean. El desarrollador de beans
enterprise se puede enfocar en la encapsulacin de las reglas de negocio, mientras
el contenedor tiene cuidado de todo lo dems.
Un bean enterprise depende del contenedor para todo lo que necesita. Si un bean
enterprise necesita acceder a una conexin JDBC o a otro bean enterprise, lo hace
a travs del contenedor; si un bean enterprise necesita acceder a la identidad de su
llamador, obtener una referencia a s mismo, o acceder a las propiedades lo hace a
travs del contenedor. El bean enterprise interacta con su contenedor a travs de
tres mecanismos: mtodos de retrollamadas, el interface EJBContext,y el Interface
de Nombres y Directorio Java (JNDI).
Todo bean implementa un subtipo del interface EnterpriseBean que define varios
mtodos, llamados mtodos de retrollamada. Cada uno de estos mtodos alerta
al bean SOBRE un evento diferente en su ciclo de vida y el contenedor llamar a
estos mtodos para notificar al bean cuando va a ser activado, cuando va a persistir
su estado en la base de datos, finalizar una transaccin, eliminar el bean de la
memoria, etc. Los mtodos de retrollamada le dan al bean una oportunidad para
hacer algn trabajo casero inmediatamente antes o despus de algn evento.
EJBContext
Para crear un componente EJB del lado del servidor, un desarrollador de beans
proporciona dos interfaces que definen los mtodos de negocio, adems de la
implementacin real de la clase bean. Entonces el cliente usa un interface pblico
del bean para crear, manipular o eliminar bean del servidor EJB. La implementacin
de la clase, para ser llamada la clase bean, es ejemplarizada en tiempo de ejecucin
y se convierte en un objeto distribuido.
Los beans enterprise viven en un contenedor EJB y son accedidos por aplicaciones
clientes sobre la red a travs de sus interfaces remote y home. Estos interfaces
exponen las capacidades del bean y proporcionan todos los mtodos necesarios
para crear, actualizar, interactuar y borrar el bean. Un bean es un componente del
lado del servidor que representa conceptos de negocio como un Cliente o un Cajero
de Hotel.
Los interfaces Remote y Home
Los interfaces remote y home representan el bean, pero el contenedor asla los
beans de los acceso directos desde las aplicaciones cliente. Cada vez que se
solicita, se crea o se borra un bean, el contenedor maneja todo el proceso.
El interface home representa los mtodos del ciclo de vida del componente (create,
destroy, find) mientras que el interface remote representa los mtodos de negocio
del bean. Los interfaces remote y home extienden los interfacesjavax.ejb.EJBObject
y javax.ejb.EJBHome respectivamente. Estos tipos de interfaces EJB definen un
conjunto de mtodos de utilidad estndares y proporcionan tipos bsicos comunes
para todos los interfaces remote y home.
Los clientes usan el interface home para obtener referencias al interface remote del
bean. El interface remote define los mtodos de negocios como mtodos de acceso
o mtodo mutadores para cambiar el nombre de un cliente, o mtodo de negocio
que realizan tareas como usar el bean CajeroDeHotel para reservar una habitacin
en un hotel. Aqu tenemos un ejemplo de cmo un bean Cliente podra ser accedido
desde una aplicacin cliente. En este caso el interface home es del tipo
ClienteHome y el interface remoto es el tipo Cliente:
El interface remoto define los mtodos de negocio de un bean; los mtodos que son
especficos para el concepto de negocio que representa. Los interfaces remotos son
subclases de javax.ejb.EJBObject que es una subclase del interface
java.rmi.Remote. La importancia de la herencia de los interfaces remotos se
explicar ms tarde. Por ahora nos enfocaremos en los mtodos de negocio y sus
significados. Aqu tenemos una definicin del interface remoto para un bean Cliente:
El interface remoto define los mtodos para acceder y mtodos para leer y actualizar
informacin sobre un concepto del negocio. Este un tpico tipo de bean llamado
bean de entidad, que representa un objeto de negocio persistente; objetos de
negocio cuyos datos se almacenan en una base de datos. Los beans de entidad
representan datos del negocio en la base de datos y aaden comportamiento
especfico para esos datos.
Mtodos de Negocio
Los mtodos de negocio tambin pueden representar tareas que un bean realiza.
Aunque un bean de entidad normalmente tiene mtodos orientados a tareas, las
tareas son ms tpicas de un tipo de bean llamado bean de sesin. Los beans de
sesin no representan datos como los beans de entidad. Representan procesos del
negocio o agentes que realizan un servicio, como hacer una reserva en un Hotel.
Aqu tenemos la definicin del interface remoto de un bean CajeroDeHotel, que es
un tipo de bean de sesin:
Hay dos tipos bsicos de beans enterprise: beans de entidad, que representan
datos en una base de datos, y beans de sesin, que representan procesos o actan
como agentes que realizan tareas. Cuando construyamos aplicaciones EJB
crearemos muchos beans enterprise, cada uno representando un concepto de
negocio diferente. Cada concepto de negocio se manifestar como un bean de
entidad o como un bean de sesin. Elegiremos el tipo de bean adecuado
dependiendo de lo que queramos que haga.
Beans de Entidad
Por cada interface remoto hay una clase que lo implementa; un objeto de negocio
que realmente implementa los mtodos de negocio definidos en el interface remoto.
Esta es la clase bean; el elemento clave del bean. Aqu tenemos una definicin
parcial de la clase del bean Cliente:
ClienteBean es la clase de implementacin. Contiene los datos y proporciona los
mtodos de acceso y otros mtodos de negocio. Como es un bean de entidad, el
ClienteBean proporciona una vista de los datos del cliente. En lugar de escribir
lgica de acceso a la base de datos en la aplicacin, la aplicacin simplemente
puede usar el interface remoto del bean Cliente para acceder a los datos del cliente.
Los beans de entidad implementan el tipo javax.ejb.EntityBean que se define como
un conjunto de mtodo de notificacin que el bean usa para interactuar con su
contenedor. Estos mtodos de notificacin se examinarn ms adelante en este
curso:
Beans de Sesin
Los interfaces remote y home los usan las aplicaciones para acceder a beans
enterprise en tiempo de ejecucin. El interface home permite a la aplicacin crear o
localizar un bean, mientras que el interface remote permite a la aplicacin llamara a
los mtodos de negocio del bean:
El interface javax.ejb.EJBHome tambin define otros mtodos que hereda
automticamente el bean ClienteBean, incluyendo un conjunto de mtodos
remove() que permiten a la aplicacin destruir ejemplares del bean.
Los interfaces remote y home son tipos de interfaces Java RMI Remote. El Interface
java.rmi.Remote es utilizado por objetos distribuidos para representar el bean en un
espacio de direccionamiento diferente (proceso o mquina). Un bean enterprise es
un objeto distribuido. Lo que significa que la clase bean es ejemplarizada y vive en
el contenedor pero puede ser accedida por aplicaciones que viven en otros espacios
de direccionamiento.
En EJB, el esqueleto para los interfaces home y remote estn implementados por
el contenedor, no por la clase bean. Esto es para asegurar que todo mtodo llamado
sobre estos tipos de referencia por una aplicacin cliente primero es manejado por
el contenedor y luego delegado al ejemplar del bean. El contenedor debe interceptar
esas peticiones hacia el bean para poder aplicar automticamente la persistencia
(beans de entidad), las transacciones, y el control de acceso.
Pilas en Java
Vemos como el acceso a los elementos de la pila se realiza siempre sobre un nico
extremo. Las operaciones que caracterizan la pila son las de introducir un nuevo
elemento sobre la cima (push) y la de extraer el elemento situado en la cima (pop).
Una forma de ver esta estructura de datos es como una pila de libros en la que slo
se puede coger el libro que est en la cima o apilar ms libros sobre la misma, pero
los libros que sostienen la pila no son accesibles pues de otro modo todo se
desmoronara.
El interfaz en Java que define esta clase de objetos y sus mtodos son los
siguientes:
Pila.java
PilaArray.java
Definimos un campo privado top para conocer en todo momento cul es la cima de
la pila. De esta forma, si queremos aadir un nuevo elemento a la pila (push) lo
haremos en la posicin siguiente a la que nos indica este campo. Observe como
slo se inserta un nuevo elemento sobre la cima cuando hay espacio suficiente, es
decir la longitud de la pila es menor que su capacidad. Primero se incrementa el
valor del campo top y despus se inserta el elemento en la pila .
Utilizaremos ahora la clase Nodo definida anteriormente para ver esta otra
implementacin a la que llamaremos PilaEnlazada . Los campos que definiremos
para esta clase son top, que almacena el nodo que est en la cima de la pila y la
longitud de la misma.
PilaEnlazada.java
A continuacin vemos como se insertan los nodos por la cima de la pila. Para ello
se crea un nuevo nodo y se le asigna como siguiente nodo la antigua cima de la
pila. El siguiente paso es actualizar la cima de la pila con el nuevo nodo creado.
El funcionamiento del pop es el siguiente. Si la lista es vaca devuelve un valor nulo.
En caso contrario actualiza la cima al siguiente elemento por debajo del nodo
situado en la cima y devuelve el valor del nodo cima:
["rojo","verde","azul","amarillo"]
Las listas admiten ciertas operaciones como son insertar un nodo adicional, borrar
un nodo, etc. En funcin de la forma de insertar nuevos elementos y acceder a los
existente tendremos distintos tipos de listas. Veamos ahora qu operaciones
bsicas se puedes realizar sobre las listas. Se tratarn aqu las operaciones que
permiten insertar y borrar elementos nicamente al principio de la misma, por lo que
las operaciones de acceso, insercin y supresin de elementos en cualquier
posicin de la lista no se consideran bsicas pero podrn ser tratadas mediante
recursin.
Primero Obtener el valor del primer elemento de la lista, tambin llamado cabeza.
Las listas pueden ser circulares, con el ltimo elemento apuntando al primero, o
pueden tener un campo que contenga el nmero de nodos que hay en la lista.
Otra forma de definir una lista es de forma recursiva. Resulta menos eficiente que
definirla a partir de un vector sin embargo no nos impone restricciones en cuanto a
su longitud. Veamos como se define en Java cada uno de los elementos de la lista:
Observe como esta estructura se corresponde con las cajas que se haban visto en
la representacin de listas. Vemos que tiene dos atributos, el elemento que se
almacena en cada nodo y el Nodo siguiente en el orden de la lista. A continuacin
se implementan los mtodos de la clase para manipular los nodos:
Nodo.java
A partir de esta clase implementaramos las lista como una cadena de nodos:
ListaEnlazada.java
Fjese como el constructor inicializa la lista a null. Este va a ser tambin el final de
la lista. De forma que cuanto el principio y final de la lista coincidan la lista estar
vaca.
Cola.java
ColaEnlazada.java
Vemos como la clase Cola contiene dos campos, cola y cabecera que apuntan al
principio y al final de la cola. La cabecera la utilizaremos para extraer elementos.
Para insertar utilizaremos la cola.
La operacin encolar crea un nodo cuyo sucesor es nulo. Esto es porque aadimos
al final de la cola, es decir, donde apunta el campo cola. Si la cola es vaca la
cabecera y la cola apuntan al mismo objeto Nodo.
Para eliminar (desencolar) y para consultar (cabecera) se utiliza el campo cabecera.
Se extraen/consultan elementos de la cabeza de la cola.
rboles en Java
La estructura de datos rbol al contrario que las listas es una estructura de datos
no lineal. Las listas tienen un orden impuesto en sus elementos teniendo como
mucho un predecesor y un sucesor. Los rboles pueden tener dos o ms sucesores.
Existe una jerarqua de nodos, de forma que a cada nodo hijo le llega una
arista de otro nodo padre. De esta forma se establece la relacin padre-hijo:
p es padre de h, h es un hijo de p.
El nodo donde comienza la jerarqua se llama nodo raz. A este nodo no
llegan arcos de ningn otro nodo, en otras palabras, no es hijo de ningn
nodo padre.
Existe un camino nico entre la raz y cualquiera de los nodos del rbol
Veremos ahora aquellos conceptos que nos dan una idea sobre la topologa del
rbol. Son los conceptos de camino, longitud y profundidad:
Por simplificar el estudio de los rboles veremos el caso de los rboles binarios.
Un rbol binario es un rbol en el que cada nodo tiene 0 2 hijos (el hijo izquierdo
y el derecho). Este rbol podr ser ordenado si para cada nodo existe un orden
lineal para todos su hijos, es decir, si tenemos el orden "menor que", un rbol ser
ordenado si para cada nodo sus hijos son menores que el padre.
Al igual que las listas la forma de definir los rboles es de manera recursiva.
Definiremos inicialmente una clase Nodo que represente cada uno de los nodos del
rbol:
Cada uno de los objetos de tipo NodoBinario representa una estructura de datos
compuesta por el elemento que se almacena en cada nodo y dos nodos que
llamaremos nodoizqy nododcha. Puesto que los nodos binario pueden tener 0 2
hijos, se han definido dos tipos de constructores para cubrir los dos casos. El resto
de mtodos son para manipular la clase nodo de forma transparente. A partir de
esta clase NodoBinario se define la clase ArbolBinario como sigue:
Notes que un ArbolBinario como mximo puede tener un hijo, si es el caso
usaremos el constructor con un solo parmetro si no es as utilizaremos el
constructor por defecto, es decir, el constructor sin parmetros.
Vamos a ver cmo se calculara el tamao del rbol a partir de esta definicin:
Definimos una funcin auxiliar que calcula el tamao de un subrbol bajo un nodo.
Este mtodo calcula una longitud 0 si el Nodo es nulo. En otro caso, la longitud ser
la suma de los tamaos de los nodos hijos ms uno, correspondiente al nodo actual.
El mtodo tamao llama al mtodo tam_aux con el nodo raiz.
Exploracin de rboles
En el rbol ejemplo,
a
c
En el rbol ejemplo,
c
a
Para la implementacin se utilizar una cola donde se almacenarn los nodos que
deben ser visitados. El primer elemento que se insertar en la cola ser el rbol.
Este proceso se realizar de forma iterativa hasta que la cola se quede vaca. Lo
ltimo que nos quedara por concretar es qu sucede cuando llegamos a un rbol
que est compuesto por un nico nodo hoja. En este caso no insertaremos ningn
subrbol en la cola puesto que no ste no tiene.
En el caso de un grafo no dirigido, los nodos estn unidos mediante lneas sin
indicacin de direccin.
Por ltimo se puede definir una funcin que asocie a cada arco un coste:
coste(arco)
Cuando este camino no tiene vrtices repetidos se dice que es simple. Salvo en el
caso de que el primer y ltimo vrtice del camino sean el mismo, en cuyo caso
hablaremos de un ciclo
Grafo conexo: Cuando entre cada dos nodos del grafo hay un camino.
a b c d e
a 0 1 1 1 0
b 1 0 0 0 1
c 1 0 0 1 1
d 1 0 1 0 1
e 0 1 1 1 0
Tal y como indica su nombre estos algoritmos intentan buscar la solucin desde el
primer momento. El enfoque que utilizan es ir construyendo la solucin en cada
paso.
Supondremos que la suma de los pesos de todos los objetos es mayor que la
capacidad mxima de la mochila. Por tanto, la solucin que encontremos deber
incluir el mximo de objetos fracciones sin sobrepasar esta capacidad.
Detectaremos que hemos alcanzado esta solucin cuando se cumpla que
Escoger el objeto menos pesado para que me quede espacio para mas
cosas.
Con el siguiente ejemplo veremos que criterio utilizaremos. Si tenemos una mochila
con capacidad, C = 14 y con el siguiente vector de pares (peso, precio):
Backtracking
Ir a la tienda de la esquina.
Ir al supermercado.
Ir al pasillo de alimentacin.
Esta tcnica tan trivial resulta especialmente til para los problemas de bsqueda
en estructuras de datos. Especialmente si no existe a priori ningn criterio de
bsqueda mejor o peor. El inconveniente es que hay que explorar sistemticamente
todas las alternativas, lo que resulta muy lento en general.
El constructor nos servir para indicar el elemento que corresponde con el estado
inicial. El siguiente mtodo contiene el algoritmo de backtracking. Como argumento,
recibe cualquier objeto que acte como criterio para distinguir un estado final. El
resultado del mtodo ser null si no se encuentra una solucin, y si algn elemento
es solucin, retorna dicho elemento.
Utilizaremos la clase definida para ver un ejemplo ms concreto. Disponemos de un
rbol binario que contiene en sus nodos la siguiente informacin:
Lgica
Como ya hemos dicho, una frmula puede tomar los valores verdadero y falso. La
semntica es el conjunto de reglas que permiten dar significado a una frmula. El
valor de una frmula vendr dado por los operadores segn las tablas de verdad.
A partir de ahora, al valor falso le asignaremos el 0, y al verdadero el 1.
p not p
0 1
1 0
p q p and q
0 0 0
0 1 0
1 0 0
1 1 1
p q p or q
0 0 0
0 1 1
1 0 1
1 1 1
p q p -> q
0 0 1
0 1 1
1 0 0
1 1 1
p q p xor q
0 0 0
0 1 1
1 0 1
1 1 0
0 1 1 0 0 1 1
1 0 0 1 0 1 1
1 1 0 0 1 0 0
Propiedades en Programacin
Complemento
not 0 = 1
not 1 = 0
p and (not p) = 0
p or (not p) = 1
Idempotencia
p and p = p
p or p = p
Identidad
p and 1 = p
p and 0 = 0
p or 1 = 1
p or 0 = p
Doble negacin
not (not p) = p
Asociacin
(p or q) or r = p or (q or r)
Distribucin
p or (q and r) = (p or q) and (p or r)
(q and r) or p = (q or p) and (r or p)
Absorcin
p and (p or q) = p
p or (p and q) = p
Leyes de Morgan
p or q = q or p p -> q = (not p) or q
Utilizando estas leyes podemos demostrar que 2 frmulas son equivalentes. Por
ejemplo, not (p -> q) y p and (not q) son frmulas equivalentes. Es decir, partiendo
de una frmula y aplicndole las reglas de transformacin, llegamos a la otra
fmula. La demostracin, utilizando las reglas anteriores, sera:
Vemos que a partir de una frmula hemos llegado a la otra aplicndole las reglas
de transformacin. Queda como ejercicio para el alumno desarrollar las tablas de
verdad de ambas frmulas y comprobar que son equivalentes.
El Pseudolenguaje Parte I
Los lenguajes de alto nivel tienen sentencias de control que se asemejan al lenguaje
hablado: "si pasa esto hago tal, si no, hago otra cosa", "mientras pase esto hago
aquello"... El pseudocdigo no es ms que una pequea "estandarizacin" del
lenguaje hablado, que luego podr traducirse a un lenguaje de programacin. Por
ejemplo, si yo digo: "si vienes ms tarde de las 5 me voy", podra escribir un
pseudocdigo:
variable_1 := 3;
(* grupo de instrucciones 1 *)
si (variable_1 = 5) entonces
hacer
_____(* grupo de instrucciones 2 *)
fin_hacer
en_otro_caso
hacer
_____(* grupo de instrucciones 3 *)
fin_hacer
El Pseudolenguaje Parte II
Variables
Las variables pueden almacenar cualquier tipo de valor, ya sea un nmero, un texto,
etc... Pero debe quedar claro, que a partir de ahora, si una variable la utilizamos
para almacenar nmeros, no podr almacenar otro tipo de datos. Adems, es
recomendable que los nombres de las variables reflejen para qu se van a usar
esas variables.
Asignacin
suma (+)
Resta (-)
Multiplicacin (*)
Divisin (/)
Lgico
Not
And
Or
Bloques de sentencias
En ocasiones... veo muertos. Frases del Sexto sentido aparte, en ocasiones hay
que agrupar un conjunto de sentencias, y lo haremos de la siguiente forma:
hacer
sentencia_1
.........
sentencia_3
fin_hacer
Consejo: El cdigo fuente de un programa puede ser muy extenso. Debe tener una
"estructura visual" que lo haga lo ms legible posible. Para ello, se suele "tabular"
el cdigo fuente, es decir, las sentencias dentro de un bloque de sentencias se
desplazan a la derecha. Esto se hace por cuestiones de estilo y legibilidad del
cdigo. Un programa funcionar igual si su cdigo fuente est bien organizado o si
est todo en una sola lnea, pero el cdigo ser mucho ms comprensible si sigue
unas "normas de estilo".
hacer
sentencia_1 hacer
sentencia_2
hacer
sentencia_3
fin_hacer
fin_hacer
sentencia_N
fin_hacer
Diagrama de Flujo I
Inicio y fin: Al inicio y al final del diagrama, habr un smbolo de este tipo
UML
Algo que debe quedar bien claro es que se trata de una notacin, es decir, reglas y
recomendaciones para representar modelos. UML no es un proceso de desarrollo,
entendido como el conjunto de pasos sistemticos a seguir para desarrollar
software. UML nos va a permitir documentar y especificar los elementos creados
mediante un lenguaje comn describiendo modelos.
Elementos estructurales
Las clases describen un conjunto de objetos que comparten los mismos atributos,
operaciones, relaciones y semntica. En la representacin de clases y objetos
distinguiremos uno de otro subrayando el nombre del objeto, a diferencia de la clase
cuyo nombre ir sin subrayar.
Elementos de comportamiento
Son la parte dinmica de UML y representan la forma de actuar del sistema, tanto
en el tiempo como en el espacio. Hay dos clases de comportamiento:
Elementos de agrupacin
Son la parte organizacional de UML. Representan las partes en las que se puede
descomponer un modelo, las cuales son llamadas paquetes. Los paquetes son un
mecanismo de propsito general para organizar elementos en grupos. En un
paquete se pueden agrupar elementos estructurales, de comportamiento y otros. Es
un elemento puramente conceptual, existe slo en el tiempo de desarrollo.
Elementos de anotacin
Sirven para documentar los modelos. Hablamos de las notas que utilizaremos para
remarcar restricciones o comentarios a un elemento o a una coleccin de
elementos.
Una dependencia es una relacin semntica entre dos clases en la cual un cambio
de un elemento puede afectar la semntica de otro (dependiente). Una asociacin
es una relacin estructural que describe un conjunto de ligas, las cuales representan
conexiones a travs de objetos. La agregacin es una clase especial de asociacin
que representa una relacin de estructura entre un conjunto y sus partes. Se
representa con un diamante en el extremo de la clase agregada.
Diagrama de Secuencia: Describe la interaccin entre los objetos por medio de los
mensajes que intercambian a lo largo del tiempo entre s.
Divide y Vencers
Nos hemos ayudado de una funcin auxiliar, suma_aux, que suma los nmeros
existentes en un intervalo dado. Para divide el intervalo por su punto medio. Si no
se puede dividir el intervalo se devuelve el valor nfimo. Sera el caso del intervalo
[2,2], donde se devolvera el 2. En otro caso se resolvera el problema ms pequeo
de calcular la suma de los intervalos ms pequeos. Por ltimo se combinaran las
soluciones de los problemas ms pequeos sumndolas:
Operadores
Operadores Aritmticos
Los operadores aritmticos son aquellos que "manipulan" datos numricos, tanto
enteros como reales. Hay 2 tipos de operadores aritmticos: unarios y binarios.
Los operadores unarios se anteponen a la expresin aritmtica, y son los
operadores de signo. Los operadores binarios se sitan entre 2 expresiones
aritmticas.
- Signo negativo
+ Suma / Divisin
El operador aritmtico + tambin se puede usar con datos de tipo string. El resultado
es la concatenacin de las cadenas. Por ejemplo:
Como todos sabris, cualquier nmero dividido por 0 da como resultado infinito.
Esto se puede aceptar desde el punto de vista abstracto de las matemticas, pero
si probis esto en un lenguaje de programacin, el compilador os avisar de un error
que viene a decir que la divisin por 0 no est permitida. Por lo tanto, el segundo
argumento de los operadores /, div y mod no debe ser 0.
Como ltima aclaracin, el operador mod devuelve el resto de realizar la divisin del
primer operando por el segundo. Es decir, 6 mod 3 = 0 y 5 mod 2 = 1.
Operadores de Asignacin
variable := valor;
real := entero SI
string := caracter SI
caracter := string NO
Operadores Relacionales
Operadores relacionales
Operador Operacin
= Igual
<> Distinto
< Menor
> Mayor
in Elemento de
Los operadores de relacin se pueden aplicar a cualquiera de los tipos que hemos
visto hasta ahora:
entero
real
lgico
caracter y cadena
Tipo1 Tipo2
entero real
caracter cadena