Download Introducción a la ciencia de la computación - Inicio

Document related concepts
no text concepts found
Transcript
Lenguajes Orientados a Objetos
M.C. Juan Carlos Olivares Rojas
Agenda
4.1 Características esenciales de los lenguajes
orientados a objetos
4.2 Ejemplos de lenguajes orientados a objetos:
CLU, SmallTalk, Eiffel
Programación Orientada a Objetos
• ¿Cuál es la diferencia entre una estructura y una
clase si las dos son ADT (Tipos de Datos
Abstractos)?
• La encapsulación
• La encapsulación permite colocar datos
lógicamente relacionados como constantes,
variables, funciones en una sola entidad.
Ejemplos son los paquetes y clases.
POO
• La visibilidad y el ocultamiento de la información
es sumamente importante.
• Este paradigma basa su funcionamiento en la
creación de objetos que se dan a través de
moldes predeterminados llamado clases.
• No es reinventar la rueda, simplemente es
estructurar de mejor forma el paradigma
imperativo.
POO
• La reutilización de componentes como son los
mecanismos de herencia y polimorfismo hacen
que la construcción de código sea más simple.
• El primer lenguaje basado en este paradigma fue
Smalltalk. Lenguajes como Java son considerado
lenguajes orientados a objetos no puros, ya que
tienen
componentes
de
programación
estructurada.
POO en Python
• Las clases se construyen de la siguiente forma:
class nombre:
def set(var, val):
self.value = val
def display(self):
print self.value
Nótese que se declaran dos métodos
POO en Python
• Por default todos los miembros de una clase son
públicos.
• El constructo tiene el nombre __init__(), el
destructor __del__(), __eq__() para comparar dos
objetos, __ne__() cuando no son iguales,
__str()__ cuando se regresa un valor como
cadena. Existen otros operadores que se pueden
redefinir como add, neg y sub que llevan la
misma estructura que los demás
POO en Python
• Se puede notar que no se han declarado atributos
de la clase.
• Se considera a Python como un lenguaje de
programación ágil.
• Desarrollar en Python un programa que defina
dos métodos área para calcular el área de un
triangulo en sus dos vertientes
POO en Python
• Para crear objetos se realiza de la siguiente forma
• var = Clase()
• Var.metodo(atributo1, atributo2)
• Realizar una clase denominada Fraccion que
permita realizar las operaciones de +, -, * y /
sobre fracciones.
Tarea
• Instalación de NetBeans 6.1 con Mobility Pack.
J2ME
• La edición Java 2 Micro Edition fue presentada en
1999 por Sun Microsystems con el propósito de
habilitar aplicaciones Java para pequeños
dispositivos.
• En esta presentación, lo que realmente se enseñó
fue una primera versión de una nueva Java Virtual
Machine (JVM) que podía ejecutarse en
dispositivos Palm.
J2ME
• Java Micro Edition es la versión del lenguaje Java
que está orientada al desarrollo de aplicaciones
para dispositivos pequeños con capacidades
restringidas tanto en pantalla gráfica, como de
procesamiento y memoria (teléfonos móviles,
PDA`s, Handhelds, Pagers, etc).
Versiones de Java
J2ME
• Un entorno de ejecución de J2ME se compone
de:
•
•
•
•
Máquina virtual.
Configuración.
Perfil.
Paquetes Opcionales.
J2ME
• Las diferentes tecnologías Java comparten un
conjunto más o menos amplio de APIs básicas del
lenguaje, agrupadas principalmente en los
paquetes java.lang y java.io.
• J2ME contiene una mínima parte de las APIs de
Java. J2ME usa 37 clases de la plataforma J2SE
provenientes de los paquetes java.lang, java.io,
java.util.
J2ME
• J2ME a diferencia de J2SE utiliza una máquina
virtual distinta de la clásica JVM denominada
KVM.
• Esta KVM tiene unas restricciones que hacen que
no posea todas las capacidades incluidas en la
JVM. J2ME es un subconjunto de J2SE (excepto
por el paquete javax.microedition).
J2ME
• Las configuraciones, que son un conjunto de
clases básicas orientadas a conformar el corazón
de las implementaciones para dispositivos de
características
específicas.
Existen
2
configuraciones definidas en J2ME:
• Connected Limited Device Configuration (CLDC)
enfocada a dispositivos con restricciones de
procesamiento y memoria. La VM (Virtual
Machine) de la configuración CLDC se denomina
KVM.
J2ME
• Connected Device Configuration (CDC) enfocada a
dispositivos con más recursos. La VM (Virtual
Machine) de la CDC se denomina CVM.
J2ME
• No hay soporte para tipos de punto flotante, no
existen los tipos double ni float (MIDP 1.1).
• No existe soporte para JNI (Java Native Interface).
• Limitada capacidad
excepciones
• Reflexión.
para
el
manejo
de
J2ME
J2ME
• La CVM (Compact Virtual Machine) ha sido
tomada como Máquina Virtual Java de referencia
para la configuración CDC y soporta las mismas
características que la Máquina Virtual de J2SE.
• Está orientada a dispositivos electrónicos con
procesadores de 32 bits de gama alta y en torno a
2Mb o más de memoria RAM.
J2ME
J2ME
NOMBRE DE PAQUETE CDC
java.io
java.lang
java.lang.ref
java.lang.reflect
java.math
java.net
java.security
java.security.cert
java.text
java.util
java.util.jar
java.util.zip
javax.microedition.io
NOMBRE DE PAQUETE CLDC
java.io
java.lang
java.util
javax.microedition.io
DESCRIPCION
Clases de interfaces estándar de E/S.
Clases básicas del lenguaje.
Clases de referencia.
Clases e interfaces de reflection.
Paquete de matemáticas.
Clases e interfaces de red.
Clases e interfaces de seguridad.
Clases de certificados de seguridad.
Paquete de texto.
Clases de utilidades estándar.
Clases y utilidades para archivos .JAR.
Clases y utilidades para archivos ZIP y comprimidos.
Clases e interfaces para conexión genérica CDC.
DESCRIPCION
Clases y paquetes estándar de E/S. Subconjunto de J2SE.
Clases e interfaces de la Máquina Virtual. Subconjunto de J2SE.
Clases, interfaces y utilidades estándar. Subconjunto de J2SE.
Clases e interfaces de conexión genérica CLDC.
J2ME
• Los perfiles identifican un grupo de dispositivos
por la funcionalidad que proporcionan
(electrodomésticos, teléfonos móviles, etc.) y el
tipo de aplicaciones que se ejecutarán en ellos.
• Las librerías de la interfaz gráfica son un
componente muy importante en la definición de
un perfil. Aquí nos podemos encontrar grandes
diferencias entre interfaces, desde el menú
textual de los teléfonos móviles hasta los táctiles
de los PDAs.
J2ME
• Para la configuración CDC tenemos los siguientes
perfiles:
• Foundation Profile.
• Personal Profile.
• RMI Profile.
• Para la configuración CLDC tenemos
siguientes:
• PDA Profile.
• Mobile Information Device Profile (MIDP).
los
J2ME
J2ME
PAQUETES DEL FOUNDATION PROFILE
java. Lang
java.util
java.net
java.io
java.text
java.security
DESCRIPCION
Soporte del lenguaje.
Añade soporte completo para zip y otras funcionalidades (java.util.Timer)
Incluye sockets TCP/IP y conexiones HTTP.
Clases Reader y Writer de J2SE.
Incluye soporte para internacionalización.
Incluye códigos y certificados.
PAQUETES DEL PERSONAL PROFILE
java. applet
java.awt
java.awt.datatransfer
java.awt.event
java.awt.font
java.awt.im
java.awt.im.spi
java.awt.image
java.beans
javax.midlet.xlet
DESCRIPCION
Clases necesitadas para crear applets o que son usadas por ello.
Clases para crear GUIs con AWT.
Clases e interfaces para transmitir datos entre aplicaciones.
Clases e interfaces para manejar eventos AWT.
Clases e interfaces para manipulación de fuentes.
Clases e interfaces para definir métodos editores de entrada.
Interfaces que añaden el desarrollo de métodos editores de entrada.
Clases para crear y modificar imágenes.
Clases que soportan JavaBeans .
Interfaces que usan el Personal Profile para la comunicación.
J2ME
PAQUETES DEL MIDP
javax.microedition.Icdui
javax.microedition.rms
javax.microedition.midlet
javax.microedition.io
java.io
java.lang
java.util
DESCRIPCION
Clases e interfaces para GUIs.
Soporte para el almacenamiento persistente del dispositivo.
Clases de definición de la aplicación.
Clases e interfaces de conexión genérica.
Clases e interfaces de E/S básica.
Clases e interfaces de la Máquina Virtual.
Clases e intefaces de utilidades estándar.
J2ME
• El proceso para llevar a cabo la creación de un
MIDlet es el siguiente:
•
•
•
•
•
Crear el MIDlet
Escribir el código y compilar.
Preverificar el código.
Empaquetar en JAR y crear el archivo JAD.
Ejecutar el emulador.
J2ME
• Las aplicaciones MIDP deben implementar los
siguientes tres métodos:
• startApp (): Este método es utilizado para la
ejecución del MIDlet. Su objetivo es ejecutar la
aplicación y solicitar recursos.
• pauseApp (): Este método es invocado por el
sistema para solicitarle al MIDlet que haga una
pausa. Libera los recursos adquiridos por el
método starApp ().
J2ME
• destroyApp (boolean unconditional): Este método
es llamado por el sistema antes de que sea
destruido el MIDlet. Además libera todos los
recursos adquiridos.
• Los MIDlets son empaquetados en carpetas .JAR
junto a imágenes, logos, para formar una MIDlet
suite.
J2ME
J2ME
• Cada archivo .JAR lleva asociado un archivo .JAD
(Java Application Descriptor, Descriptor de
Aplicación Java) que es utilizado para gestionar la
instalación.
• El archivo .JAM (Java Application Manager,
Manejador de Aplicaciones Java) es el encargado
de gestionar la descarga y la instalación de los
MIDlets.
J2ME
• Los MIDlets tienen atributos obligatorios y
opcionales
ATRIBUTOS OBLIGATORIOS
MIDlet-Name
MIDlet-Versión
MIDlet-Vendor
MIDlet-<n> (name, icon, class)
MicroEdition-Profile
MicroEdition-Configuration
ATRIBUTOS OPCIONALES
MIDlet-Description
MIDlet-Icon
MIDlet-Info-URL
MIDlet-Data-Size
J2ME
• Para poder instalar un MIDlet en un teléfono
celular del cliente se siguen los siguientes pasos:
•
•
•
•
Paso 1: El Cliente pide una el fichero JAD.
Paso 2: El fichero JAD es descargado al Cliente.
Paso 3: El JAM verifica el archivo JAD.
Paso 4: Se descarga la MIDlet suite al Cliente.
J2ME
J2ME
J2ME
J2ME
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class hola extends MIDlet {
private Display pantalla;
private Form formulario = null;
public hola() {
pantalla = Display.getDisplay(this);
formulario = new Form("Hola Mundo");
}
J2ME
public void startApp(){
pantalla.setCurrent(formulario);
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
pantalla = null;
formulario = null;
notifyDestroyed();
}
}
J2ME
• La clase Display representa el manejador de la
pantalla y los dispositivos de entrada.
• Todo MIDlet debe poseer por lo menos un objeto
Display.
• En este objeto Display podemos incluir tantos
objetos Displayable como queramos.
J2ME
• La clase Display puede obtener información sobre
las características de la pantalla del dispositivo
donde se ejecute el MIDlet, además de ser capaz
de mostrar los objetos que componen nuestras
interfaces.
• Todo MIDlet debe poseer al menos una instancia
del objeto Display. Para obtenerla se utiliza:
• Display pantalla = Display.getDisplay(this)
J2ME
• Dentro del método startApp tendremos que
hacer referencia a la pantalla que queramos que
esté activa haciendo uso del método: setCurrent()
• Hay que tener en cuenta que cada vez que
salimos del método pauseApp, entramos en el
método startApp, por lo que la construcción de
las pantallas y demás elementos que formarán
parte de nuestro MIDlet la tendremos que hacer
en el método constructor.
J2ME
J2ME
javax.microedition.lcdui
• Interfaces:
•
•
•
•
Choice
CommandListener
ItemCommandListener
ItemStateListener
javax.microedition.lcddui
•
•
•
•
•
•
•
•
•
Alert
AlertType
Canvas
ChoiceGroup
Command
CustomItem
DateField
Display
Displayable
javax.microedition.lcdui
•
•
•
•
•
•
•
•
•
Font
Form
Gauge
Graphics
Image
ImageItem
Item
List
Screen
javax.microedition.lcdui
•
•
•
•
•
Spacer
StringItem
TextBox
TextField
Ticket
javax.microedition.lcdui.game
•
•
•
•
•
GameCanvas
Layer
LayerManager
Sprite
TiledLayer
• Los IDEs más recientes nos permiten mostrar
información de las clases y objetos a través de
etiquetas inteligentes.
Actividad
• Realizar una aplicación que tenga menú de
opciones y que permita calcular lo siguiente:
• Áreas de Figuras Geométricas Básicas (Triángulo,
Rectangulo, Cuadrado, Rombo, Trapecio), EDSSON
• Conversión de Temperaturas de
Centígrados, Farenheit y Kelvin JAVIER
grados
Actividad
• Programa que permita multiplicar matrices de 3 x
3 o de 2x2. IVÁN
• Programa que permita realizar el cálculo de
sumas, restas, multiplicaciones y divisiones de
fracciones. FRANCISCO
• Realizar un menú integrador para invocar cada
funcionalidad. A su vez realizar una pantalla de
créditos. TODOS. Proyecto MateMovil.
J2ME
• Muchas de las funcionalidades básicas de Java se
pueden implantar de manera directa en J2ME
como el manejo de primitivas gráficas.
• La clase más básica es la Graphics, la cual tiene
métodos que nos permiten dibujar sobre un
lienzo Canvas.
J2ME
• Generalmente se utilizan dentro del método
paint() de un Applet o de una aplicación gráfica.
• Los métodos repaint() y update son variantes del
método paint().
J2ME
• El método repaint() se utiliza cuando se desea
volver a dibujar la pantalla (lo cual es muy
frecuente en los sistemas gráficos multitarea) y
dibuja toda la pantalla. El método update() sólo
actualiza una región de la pantalla. Muy utilizado
en componentes gráficos como botones o listas
desplegables.
J2ME
• La clase Graphics se encuentra dentro del
paquete java.awt.*;
• El método drawString() permite dibujar una
cadena de texto en la pantalla.
• El método drawLine() dibuja una línea en la
pantalla. El método drawRectangle() permite
dibujar un rectángulo en pantalla.
J2ME
• El método drawOval permite definir óvalos y
circulos. El método drawImage() permite mostrar
imágenes en pantallas.
• El método clearRect() permite borrar un área de
la pantalla. El método copyArea() copia un área
de memoria. Esto se utiliza en los métodos de
recorte (clip).
• Métodos como drawPolygon y drawPolyline()
permiten definir figuras más elaboradas.
J2ME
• Los métodos que inician con fill, como fillOval(),
fillRect(), etc., realizan las mismas figuras pero
pintan el relleno de las figuras.
• Otros elementos a considerar para el manejo de
gráficos son el color y las fuentes (tipos de letras).
Java define clases para manipular estos objetos
gráficos de manera amplia.
J2ME
• Los métodos getFont(), setFont(), getColor() y
setColor() permiten manipular fuentes y colores.
• La clases Font y Color se encuentran definidas
también en java.awt.*
• El método translate() de Graphics() permite
cambiar el punto de referencia que de manera
predeterminada es 0,0 para esquina superior
izquierda.
J2ME
• La clase Color define el modelo de color a
emplear, cuenta con algunas constantes para
cada tipo de color como orange, yellow, darkgray,
etc. El color está dado por tres valores uno para el
rojo, otro para el verde y otro para el azul.
• Se cuentan además con métodos para manipular
los atributos de la clase.
J2ME
• La clase Font permite el manejo de fuentes en
pantalla. El constructor de esta clase recibe tres
argumentos: el nombre de la fuente, el estilo de
la fuente y el tamaño.
• El estilo de la fuente está definido por tres
constantes PLAIN (normal), BOLD (negrita) e
ITALIC (cursiva). Se cuenta además con métodos
auxiliares para manipular los atributos de la clase.
J2ME
• Una fuente no es otra cosa que una colección de
imágenes que representan los caracteres de un
sistema.
• Se cuenta además con la clase FontMetrics que
define algunas métricas de la fuente: altura,
bajada, la subida, la interlínea, etc.
J2ME
• También se pueden dibujar figuras 3D muy
sencillas con métodos como draw3DRect y
fill3DRect que dan profundidad a las imágenes.
• Algunas de estas funcionalidades dependen del
perfil y de la configuración del dispositivo.
Introducción
• Se puede obtener el contexto gráfico de una
imagen y manipularla como si fuera un objeto
Graphics. Ejemplo:
Font letra = Font.getFont(Font.FACE_MONOSPACE,
Font.SIZE_SMALL, Font.STYLE_PLAIN);
Image
logo
=
Image.createImage(letra.stringWidth(“Hi!”))
Graphics gr = logo.getGraphics();
…
J2ME
• Existen algunas APIs especiales para el manejo de
gráficos en dispositivos móviles como los
definidos por Nokia (com.nokia.mid.ui) que
contiene clases como DirectGraphics.
• También se pueden manejar otro tipos de
elementos como multimedia, sprites, etc.
También se cuenta con la clase Graphic3D para
gráficas en 3D.
J2ME
• Realizar un programa que implemente a través de
un formulario la graficación de las funciones: x2 +
1, 3x2 - 1, x+1 y x3 + x -5.
• El usuario dará los posibles valores de X en un
formulario de 5 elementos.
• Nótese que no hay una clase visual para
desarrollar gráficos en NetBeans.
J2ME
• También se puede realizar la conexión a redes,
para ello se deberá utilizar el paquete
javax.microedition.io.*
• Se deberá definir una conexión a través de la
clase StreamConnection, abriendo buffers de
entrada y salida con las clases InputStream y
OutputStream Respectivamente.
• Conexión = Connector.open(URL);
J2ME
• out = conexión.openOutputStream();
• In = conexión.openInputStream();
• Se lee el flujo con in(), se sugiere almacenar los
datos en un StringBuffer e ir agregando datos con
el método append()
• Se puede mejorar las conexiones si se utiliza el
objeto HttpConnection, aunque sólo aplica a
conexiones Web.
J2ME
• La información hasta ahora manejada ha sido de
tipo no persistente, de tal forma que al terminar
la aplicación y volverla a ejecutar, no se pueden
recuperar los datos.
• Para lograr persistencia se requiere de la
manipulación de archivos, elemento que no está
presente en la mayoría de los dispositivos móviles
con CLDC/MIDP.
J2ME
• Para lograr la persistencia se requiere de un
motor de persistencia conocida como RMS
(Record Management System) que no es otra
cosa que una pequeña base de datos empotrada
en el dispositivo.
• La unidad básica de almacenamiento de la
información es el registro (record), ubicado en un
almacén de registros (record store).
J2ME
• Antes de operar un registro se debe abrir o crear.
Las operaciones pueden ser de lectura y escritura.
• Se utiliza el paquete javax.microedition.rms.*
• La clase
métodos:
RecordStore
• openRecordStore()
• closeRecordStore()
tiene
los
siguientes
J2ME
•
•
•
•
•
•
•
deleteRecordStore()
getName()
getNumRecords()
addRecord()
getRecord()
deleteRecord()
enumerateRecords()
J2ME
• Se cuentan con las interfaces de:
– RecordEnumeration
– RecordComparator
– RecordFilters
– RecordListener
• Los datos a agregar deben estar en formato de un
arreglo de bytes
• rs.addRecord(bytes, 0, bytes.length)
Referencias
• Ferreira, R (2008). Curso de Programación en
J2ME. Instituto Tecnológico de Morelia.
• Prieto (2004). Desarrollo de Juegos con J2ME,
Editorial Alfaomega Ra-Ma, España.
¿Preguntas, dudas y comentarios?