Introducción a Java LSUB GSYC 22 de enero de 2016 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento NoComercial - SinObraDerivada (by-nc-nd). Para obtener la licencia completa, véase http://creativecommons.org/licenses/by-sa/2.1/es. También puede solicitarse a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Abstracción I Representación de los objetos de la vida real en los programas. I Nivel de abstracción y ayuda del lenguaje para abstraer. I Si usamos bien la OOP, abstraer es más fácil. I La OOP obliga a pensar en los datos y sus operaciones de forma conjunta. Ojo, en programación estructurada también se puede programar ası́ (esto es, programar bien). OOP I Todo es un objeto: Un objeto es un conjunto de datos y un conjunto de servicios que se le pueden requerir. (Casi) todos los elementos del programa son objetos. I Los objetos se comunican mediante mensajes: cuando un objeto requiere que otro realice una operación, se lo comunica pasando un mensaje (i.e. invocando a un método). La interfaz de un objeto determina dichos mensajes. OOP I Cada objeto tiene su propia memoria: Un objeto tiene su propia memoria y puede estar compuesto internamente por otros objetos distintos, aunque gran parte de su implementación sea privada. I Todo objeto tiene un tipo: un objeto es una instancia de una clase. Las clases son tipos de datos para los objetos, que determinan los mensajes que puede recibir y los datos que lo forman. OOP I Todos los objetos de un tipo determinado reciben los mismos mensajes: un objeto puede ser reemplazado por otro objeto del “mismo” tipo → otra instancia de la misma clase. Java: plataforma I Un programa escrito en Java compila a bytecode de Java, no a código máquina (nota: otros lenguajes también se pueden compilar a bytecode de Java). I El bytecode de Java ejecuta dentro de la JVM, que es una máquina virtual o abstracta. También se puede compilar a código máquina. I La JVM ejecuta alojada en un OS o está implementada en hardware. I JRE (Java Runtime Environment): JVM y el API estándar de Java (Java Class Library). Java: plataforma fuente (.java) → COMPILADOR → bytecode (.class .jar) → JVM I javac compila el fuente (.java). I java ejecuta el bytecode (.class o .jar). I Por lo general, para programar en Java se usa un integrated development environment (IDE) que integra el editor, compilador, entorno de ejecución, herramientas de programación y depuración, etc. I En este curso usaremos Eclipse como IDE. Java: plataforma c Imagen 2012-2014 www.careerbless.com Java: programas I Un programa está formado por uno o más paquetes. I Un paquete está formado por una o más clases. I Una clase está formada por métodos (acciones) y atributos (datos). I Los métodos están formados por sentencias. I Una clase puede tener un método main, que es el punto de entrada al programa. Java: paquetes Se pueden ver como directorios para los ficheros fuente. Para indicar a qué paquete pertenece un fichero: package o r g . l s u b . h a s h ; Para importar clases de otros paquetes: import o r g . l s u b . h a s h . ∗ ; import o r g . l s u b . c r y p t o . A e s C i p h e r ; Java: referencias y memoria Las referencias de Java son punteros a objetos con las siguientes restricciones: I No hay aritmética de referencias. I No hay operador address-of (&). I Tienen tipado fuerte. I No hay malloc. Un nuevo objeto se crea con new y se mantiene en el heap. I No hay free. Java tiene recolección de basura. Lenguaje Identificadores: I Como en cualquier otros lenguaje, deben ser claros y deben dar información sobre el elemento. I Java es case-sensitive. I No pueden comenzar con dı́gitos y pueden tener letras, dı́gitos, subrayado y dólar. Lenguaje Estilo*: I Paquete: org.lsub.security I Clases: ElectricGuitar I Constantes: N STRINGS I Métodos: playSong I Variables: c I Se tabula con Tabs. * ver http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html Lenguaje Palabras reservadas: I abstract, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, extends, false, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, true, try, void, volatile, while Lenguaje Comentarios: I // comenta una lı́nea. I /* */ comenta un bloque de lı́neas. I /** */ es javadoc. Lenguaje Javadoc: I Permite generar documentación HTML a partir del código y ciertos comentarios especiales. I Hay etiquetas de javadoc (@) nos permiten describir ciertos atributos del programa. Eclipse nos ayudará con esto. /∗ ∗ ∗ T h i s i s t h e one l i n e m a n d a t o r y d e s c r i p t i o n o f t h e method . ∗ ∗ T h i s i s a l o n g e r , o p t i o n a l d e s c r i p t i o n . I f t h e r e w e r e any , ∗ here . ∗ <p> ∗ And e v e n more e x p l a n a t i o n s t o f o l l o w i n c o n s e c u t i v e ∗ p a r a g r a p h s s e p a r a t e d by HTML p a r a g r a p h b r e a k s . ∗ ∗ @param p a r a m e t h e r D e s c r i p t i o n t e x t t e x t t e x t . ∗ @return Description text text text . ∗/ it w Javadoc Para documentar el paquete tenemos que crear un fichero package-info.java con su descripción: /∗ ∗ ∗ This package p r o v i d e s l o g g i n g f a c i l i t i e s f o r data bases ∗ <p> ∗ Run L o g g e r . App i f a l l you want i s t o s t a r t t h e ∗ logger application . ∗ <u l > ∗ < l i > L o g g e r . Zoo : A z o o k e p e r b a s e f a c a d e f o r t h e p a c k a g e ∗ P r o v i d e s a l o g l a u n c h e r and manager t h a t a c t s upon ∗ c o n f i g u r a t i o n t a k e n from z o o k e e p e r . ∗ <l i > Logger . Srv : log s e r v e r s , or l o g g e r s . ∗ </u l > ∗ <p> ∗/ package l s u b . o r g . l o g g e r ; Hola mundo // e s t a e s l a c a b e c e r a de l a c l a s e public class hello { // e s t a e s l a c a b e c e r a d e l metodo main p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { /∗ ∗ e s t e e s e l c u e r p o d e l metodo main ∗/ System . o u t . p r i n t ( ” Hey ho l e t s go ! ” ) ; } }