java eclipse

324
por Ignacio Vivona www.FreeLibros.me

Upload: victor-david-montanez

Post on 31-Dec-2015

374 views

Category:

Documents


30 download

TRANSCRIPT

  • This book is the key to access the world ofprogramming with Java, the leading language inclient-server applications. Know all the secrets ofthis object-oriented programming language, themost widely used today by developers.

    JAVA

    CONTENIDO

    N I V E L D E U S U A R I O

    PRINCIPIANTE INTERMEDIO AVANZADO EXPERTO

    1 | PROGRAMACIN ORIENTADA A OBJETOSHistoria / Conceptos / Terminologa / Polimorfismo /Tipos y subtipos / Herencia / Por qu objetos?

    2 | INICIACIN A JAVAHistoria / Preparacin / Eclipse IDE / Test DrivenDevelopment / Primeros cdigos

    3 | SINTAXISPalabras clave / Ciclos / Declaraciones, expresiones,sentencias y bloques / Otras estructuras / Tipos primitivosy literales / Operadores / Paquetes

    4 | CLASESDefinicin / Atributos / Mtodos / La herencia y los mtodos/ Constructores / This y Super / Esttico vs. no esttico

    5 | MS CLASESClases abstractas / Clases anidadas / Clases anidadasestticas / Clases internas / Clases locales y clasesannimas / Ejercicio: el juego de la vida

    6 | INTERFACESDefinicin / Uso / Clases abstractas vs. interfaces

    7 | ENUMERACIONESDefinicin / Uso

    8 | EXCEPCIONESDefinicin / Uso / Excepciones chequeadas / Excepcionesno chequeadas / Errores

    9 | GENRICOSDefinicin / Subtipado / Comodn / Tipos restringidos /Genricos en el alcance esttico

    10 | LIBRERA BASELibrera y objetos bsicos / Colecciones / Clases tiles / I/O

    11 | ANOTACIONESQu son las anotaciones? / Definicin / Uso de lasanotaciones / Acceder a las anotaciones en tiempo deejecucin / Distintos usos de las anotaciones

    12 | TCNICAS Y DISEOJava Beans / Inyeccin de dependencias e inversin decontrol / Evitar null / Representar conceptos con objetos

    En este sitio encontrar una gran variedad de recursos y software relacionado, quele servirn como complemento al contenido del libro. Adems, tendr la posibili-dad de estar en contacto con los editores, y de participar del foro de lectores, endonde podr intercambiar opiniones y experiencias.

    Si desea ms informacin sobre el libro puede comunicarse connuestro Servicio de Atencin al Lector: [email protected]

    DOMINE EL LENGUAJE LDER EN APLICACIONES CLIENTE-SERVIDOREste libro fue concebido para ayudar a quienes buscan aprender a programar

    en Java, como as tambin para aquellos que conocen el lenguaje, pero quie-

    ren profundizar sus conocimientos.

    Con la lectura de esta obra, iniciaremos un apasionante y progresivo recorri-

    do, que comenzar con los conceptos fundamentales de la programacin

    orientada a objetos, el diseo y el desarrollo de software. El aprendizaje ser

    completo desde el momento en que tendremos en cuenta las buenas prcticas

    y las mejores tcnicas para obtener programas robustos, claros y eficientes.

    Todos los procedimientos son expuestos de manera prctica con el cdigo

    fuente de ejemplo (disponible en Internet), diagramas conceptuales y la

    teora necesaria para comprender en profundidad cada tema presentado. Al

    finalizar el libro, el lector contar con las herramientas requeridas para ser

    un programador integral en Java.

    Ignacio Vivona es un desarrollador de software con ms de diez aos de expe-

    riencia y un entusiasta de la tecnologa desde siempre. Gracias a su gua y

    consejos, estaremos en condiciones de conocer a fondo el lenguaje y ponerlo

    en prctica para insertarnos en el mercado del desarrollo de software.

    JAVA

    por Ignacio Vivona

    Tapa Java OK.qxp 23/08/2011 21:48 Pgina 1

    www.FreeLibros.me

  • CLAVES Y TCNICAS PARA OPTIMIZAR SITIOS DE FORMA PROFESIONAL

    POTENCIE SUS SITIOS CON EL PODER DE AMBAS HERRAMIENTAS

    PROGRAMACIN DE SITIOS WEB PROFESIONALES

    DISEO DE SITIOS WEB COMPLEJOS CON LAS HERRAMIENTAS DE ADOBE

    >> DESARROLLO / INTERNET>> 400 PGINAS>> ISBN 978-987-1773-09-1

    >> DESARROL>> 400 PGIN>> ISBN 978-

    >> DESARROLLO>> 432 PGINAS>> ISBN 978-987-1773-16-9

    >> DESARROL>> 432 PGIN>> ISBN 978-

    >> DESARROLLO / INTERNET>> 400 PGINAS>> ISBN 978-987-1773-07-7

    >> DESARROL>> 400 PGIN>> ISBN 978-

    >> DISEO / DISEO WEB>> 320 PGINAS>> ISBN 978-987-663-022-1

    >> DISEO / D>> 320 PGIN>> ISBN 978-

    Bombo - RT - LIBRO Java.indd 1Bombo - RT - LIBRO Java.indd 1 24/08/2011 16:08:0624/08/2011 16:08:06

    www.FreeLibros.me

  • JAVADomine el lenguaje lDer en aplicaciones cliente-serviDor

    por ignacio vivona

    00_Java_AJUSTADO.indd 1 8/25/11 1:02 PM

    www.FreeLibros.me

  • copyright mmXi. es una publicacin de Fox andina en coedicin con Dalaga s.a. Hecho el depsito que marca la ley 11723.

    todos los derechos reservados. esta publicacin no puede ser reproducida ni en todo ni en parte, por ningn medio actual o

    futuro sin el permiso previo y por escrito de Fox andina s.a. su infraccin est penada por las leyes 11723 y 25446. la editorial

    no asume responsabilidad alguna por cualquier consecuencia derivada de la fabricacin, funcionamiento y/o utilizacin de los

    servicios y productos que se describen y/o analizan. todas las marcas mencionadas en este libro son propiedad exclusiva de sus

    respectivos dueos. impreso en argentina. libro de edicin argentina. primera impresin realizada en sevagraf, costa rica 5226,

    grand Bourg, malvinas argentinas, pcia. de Buenos aires en iX, mmXi.

    vivona, ignacio

    java. - 1a ed. - Buenos aires : Fox andina; Dalaga, 2011.

    320 p. ; 24x17 cm. - (manual users; 218)

    ISBN 978-987-1773-97-8

    1. informtica. i. ttulo

    cDD 005.3

    TTULO: Java

    AUTOR: Ignacio Vivona

    COLECCIN: Manuales USERS

    FORMATO: 17 x 24 cm

    PGINAS: 320

    ISBN 978-987-1773-97-8

    00_Java_AJUSTADO.indd 2 8/25/11 1:02 PM

    www.FreeLibros.me

  • ANTES DE COMPRAREN NUESTRO SITIO PUEDE OBTENER, DE FORMA GRATUITA, UN CAPTULO DE CADA UNO DE LOS

    LIBROS EN VERSIN PDF Y PREVIEW DIGITAL. ADEMS, PODR ACCEDER AL SUMARIO COMPLETO, LIBRO DE UN VISTAZO, IMGENES AMPLIADAS DE TAPA Y CONTRATAPA Y MATERIAL ADICIONAL.

    REDISEO BOMBOS LIBROS - PAG 01 - Base Editable - Nov 09.indd 1REDISEO BOMBOS LIBROS - PAG 01 - Base Editable - Nov 09.indd 1 27/4/2011 13:05:5127/4/2011 13:05:51

    www.FreeLibros.me

  • www.redusers.com

    4 PRELIMINARES

    Ignacio VivonaDesarrollador de software desde hace casi

    diez aos y entusiasta de la tecnologa desde

    hace mucho ms. Ha trabajado en varios

    sistemas informticos de gran envergadura,

    desde programas de consulta de autopartes para

    sistemas GIS de seguimiento de vehculos, hasta

    desarrollos para motores de reglas y sitios web de

    distinta ndole. Ha utilizado un amplio espectro de

    tecnologas y plataformas para aplicar las distintas

    opciones y herramientas que ms se adecuan a cada situacin. Trabaj

    en plataformas Windows y Linux, haciendo uso de tecnologas como

    C++ y Visual Basic para la creacin de aplicaciones de escritorio,

    servicios y para componentes transaccionales. Por otra parte, tambin

    ha desarrollado diversas aplicaciones para la Web utilizando Java,

    .NET, PHP y ASP. Particip en la creacin de varios frameworks, en

    los cuales se basaron distintas aplicaciones.

    Realiz su tesis para la carrera de Licenciatura en Ciencias de la

    Computacin en la Universidad de Buenos Aires.

    AgradecimientosA Yayi, por su confianza y su apoyo incondicional.

    A Nicols Kestelboim, por la oportunidad de escribir este libro.

    A Mati, Marce y Emi por bancarme en esta iniciativa.

    A mis padres y mi hermano.

    Y a mis amigos.

    00_Java_AJUSTADO.indd 4 8/29/11 8:39 AM

    www.FreeLibros.me

  • www.redusers.com

    5JAVA

    PrlogoLe por primera vez algo sobre Java all por el ao 1998, en una

    revista de informtica espaola. En esa ocasin me intrig el slogan

    compilarlo una vez, correrlo en cualquier lado y desde ese momento

    comenc a investigar sobre el tema. Consegu un libro sobre Java, uno

    de los primeros en nuestra lengua, desarrollando ejercicios y leyendo

    en los sitios web fui creciendo en el lenguaje.

    Luego me fui metiendo cada vez ms en la teora del paradigma

    de la programacin orientada a objetos, fui entendiendo sus bases,

    su historia y las ideas que propone. Esto me fue llevando a investigar

    otros temas, otros paradigmas y otros lenguajes.

    Es esa sensacin de necesitar saber cmo funciona algo, qu partes

    lo componen y de qu forma interactan para cumplir con una tarea

    ms compleja que la que realizan individualmente. Es esta curiosidad,

    sumada a las ganas de crear, de concretizar ideas, los elementos

    necesarios para ser un programador.

    En este libro me propongo llevar al lector en un viaje por el

    maravilloso mundo de la programacin con objetos. Utilizaremos como

    medio de transporte el lenguaje Java, uno de los exponentes ms famosos

    de este paradigma de programacin. Iremos aprendiendo las ideas y las

    metodologas sobre la programacin con objetos, aplicando todo lo que

    veamos en los ejercicios y poniendo en prctica los test unitarios.

    Invito ahora al lector a comenzar este recorrido juntos, e ir

    aprendiendo cmo materializar nuestras ideas, utilizando Java y la

    programacin orientada a objetos. Sin ms, arrancamos

    Ignacio Vivona

    Claudio PeaAutor y editor RedUsers

    [email protected]

    00_Java_AJUSTADO.indd 5 8/29/11 8:39 AM

    www.FreeLibros.me

  • www.redusers.com

    PRELIMINARES6

    El libro de un vistazoEste libro realiza un recorrido por la teora tras las ideas soportadas

    por el paradigma de la programacin orientada a objetos y su aplicacin

    con Java. Los primeros captulos presentan los conceptos del paradigma,

    luego se explaya en el lenguaje y en el modelado correcto con l.

    ProgrAmAcIN orIeNtAdA A oBJetoS

    en este captulo veremos la historia del

    paradigma de la orientacin a objetos.

    analizaremos conceptos como polimorfismo y

    herencia. tambin veremos los tipos y subtipos.

    INIcIAcIN A JAVA

    este captulo se dedica a la presentacin del

    lenguaje java. empezaremos viendo su historia

    y los motivos detrs de su creacin, para

    luego preparar nuestros cdigos.

    SINtAxIS

    aprenderemos cmo estn compuestos los

    programas en java. veremos las distintas

    estructuras del lenguaje, su significado as

    como tambin las reglas que lo definen.

    clASeS

    en este captulo veremos las clases.

    aprenderemos cmo se definen, cmo se

    especifica el estado de las instancias y cmo se

    declara el comportamiento de estas.

    mAS clASeS

    continuamos con el tema del captulo anterior y

    avanzamos sobre temas como clases abstractas

    y clases anidadas. luego presentamos un gran

    ejercicio: el juego de la vida.

    INterfAceS

    en este captulo analizaremos las interfaces.

    veremos cul es el motivo de su existencia, cmo

    se definen y cundo se deben utilizar. Finalmente

    las compararemos con las clases abstractas.

    eNumerAcIoNeS

    aqu conoceremos las enumeraciones como la

    forma que tiene el lenguaje java de definir una

    serie de elementos conocidos y que comparten

    un comportamiento y estn agrupados.

    excePcIoNeS

    aprenderemos en este captulo cmo se

    encuentran clasificadas las excepciones, cmo

    funcionan, en qu casos debemos utilizarlas y

    de qu forma las implementamos.

    00_Java_AJUSTADO.indd 6 8/25/11 1:02 PM

    www.FreeLibros.me

  • www.redusers.com

    JAVA 7

    a lo largo de este manual podremos encontrar una serie de recuadros que nos brindarn informacin complemen-

    taria: curiosidades, trucos, ideas y consejos sobre los temas tratados. para poder reconocerlos fcilmente, cada

    recuadro est identificado con diferentes iconos:

    INFORMACIN COMPLEMENTARIA

    geNrIcoS

    en este captulo seremos presentados con

    la forma que define el lenguaje que permite

    parametrizar los tipos utilizados en nuestro

    cdigo. veremos por qu son necesarios,

    cmo se definen y de qu forma debemos

    utilizarlos.

    lIBrerA BASe

    aqu nos encargaremos de ver la librera

    base que proporciona java. conoceremos y

    analizaremos las clases e interfaces principales

    que todo programador debe conocer.

    ANotAcIoNeS

    trataremos en este captulo una forma

    de definir informacin extra en nuestros

    programas, que podr ser consultada

    luego en distintos momentos de la vida

    de nuestro cdigo.

    tcNIcAS y dISeo

    captulo donde aprenderemos algunas tcnicas

    de diseo que no ayudan en la tarea de

    construccin de software robusto, claro

    y mantenible. tendremos, tambin, una

    primera aproximacin a los famosos

    patrones de diseo.

    reflexIN

    en este apartado estudiaremos el aspecto del

    lenguaje java que permite analizar y modificar

    las clases y tambin los objetos desde el

    mismo programa mientras es ejecutado.

    SIguIeNteS PASoS

    Finalmente, en este anexo, se nos presentarn

    distintos caminos que podremos seguir

    para ir enriqueciendo y ampliando nuestro

    conocimiento sobre java y el desarrollo

    de software.

    CuRIOsIdAdEs

    E IdEAs

    ATENCIN dATOs TILEs

    y NOvEdAdEs

    sITIOs wEb

    00_Java_AJUSTADO.indd 7 8/25/11 1:02 PM

    www.FreeLibros.me

  • REDISEO BOMBOS LIBROS - PAG 08 - Base Editable - Dic 09.indd 1REDISEO BOMBOS LIBROS - PAG 08 - Base Editable - Dic 09.indd 1 10/05/2010 12:57:5310/05/2010 12:57:53

    www.FreeLibros.me

  • www.redusers.com

    JAVA 9

    ContenidoSobre el autor .................................................. 4

    Prlogo ............................................................ 5

    El libro en un vistazo ....................................... 6

    Informacin complementaria ........................... 7

    Inroduccin .................................................... 12

    Programacin orientada a objetosHistoria .................................................................14

    Conceptos .............................................................15

    Terminologa ....................................................17

    Polimorfismo ....................................................18

    Tipos y Subtipos ...................................................19

    Herencia ...............................................................21

    Herencia simple versus herencia mltiple ...........24

    Por qu objetos?.................................................25

    Resumen ...............................................................27

    Actividades ...........................................................28

    Iniciacin a JavaHistoria .................................................................30

    Preparacin ..........................................................32

    Eclipse IDE ...........................................................33

    Primeros cdigos ..................................................38

    Resumen ...............................................................43

    Actividades ...........................................................44

    Sintaxis Palabras claves .....................................................46

    Ciclos ....................................................................52

    Declaraciones, expresiones,

    sentencias y bloques .............................................58

    Variables ...............................................................58

    Sentencias .............................................................60

    Otras estructuras ..................................................60

    if/else/else if ..........................................................60

    Switch ...................................................................63

    Try/catch/finally .....................................................65

    Tipos primitivos y literales ...................................67

    Operadores ...........................................................70

    Paquetes ...............................................................72

    Resumen ...............................................................73

    Actividades ...........................................................74

    clases Definicin .............................................................76

    Atributos ..............................................................79

    Mtodos ...................................................................82

    La herencia y los mtodos .....................................84

    Constructores ......................................................85

    This y Super .........................................................87

    Lo esttico versus

    lo no esttico ........................................................90

    Resumen ...............................................................91

    Actividades ...........................................................92

    CAP4_DIAG 1

    Objeto

    Vehculo

    Auto VehculoTerrestre

    CLASES INTERFACES

    00_Java_AJUSTADO.indd 9 8/25/11 1:02 PM

    www.FreeLibros.me

  • www.redusers.com

    PRELIMINARES10

    ms clasesClases abstractas ..................................................94

    Clases anidadas ........................................................97

    Clases anidadas estticas ......................................97

    Clases internas ......................................................98

    Clases locales y clases annimas .......................101

    Ejercicio: El juego de la vida .............................103

    Resumen .............................................................121

    Actividades .........................................................122

    Interfaces Definicin ...........................................................124

    Uso .....................................................................126

    Clases abstractas versus interfaces ....................129

    Resumen .............................................................131

    Actividades .........................................................132

    enumeracionesDefinicin ...........................................................134

    Uso .....................................................................136

    Resumen .............................................................147

    Actividades .........................................................148

    excepcionesDefinicin ...........................................................150

    Uso .....................................................................154

    Excepciones chequeadas ....................................157

    Excepciones no chequeadas ...............................158

    Errores ................................................................159

    Resumen .............................................................159

    Actividades .........................................................160

    genricosDefinicin ...........................................................162

    Subtipado ...........................................................166

    Comodn .............................................................166

    Tipos restingidos ................................................167

    Genricos en el alcance esttico ........................168

    Resumen .............................................................169

    Actividades .........................................................170

    librera BaseLibrera y objetos bsicos ..................................172

    java.lang.Object ...................................................172

    java.lang.Boolean ................................................174

    Colecciones ........................................................177

    java.util.Collection ...............................................178

    java.util.Set .........................................................180

    java.util.Map .......................................................181

    Ejercicio: colecciones diferentes ........................182

    Clases tiles ........................................................186

    Ejercicio: alternativa a java.util.Date ..................188

    I/O .......................................................................192

    java.io.InputStream y su familia ..........................192

    java.io.Reader y java.io.Writer ............................195

    Resumen .............................................................197

    Actividades .........................................................198

    GregorianCalendar

    CAP10_DIAG 3

    Date Calendar

    Object

    00_Java_AJUSTADO.indd 10 8/25/11 1:02 PM

    www.FreeLibros.me

  • www.redusers.com

    JAVA 11

    AnotacionesQu son las anotaciones? ..................................200

    Definicin ...........................................................204

    Heredando anotaciones .......................................208

    Uso de las anotaciones .......................................209

    Accediendo a las anotaciones

    en tiempo de ejecucin ......................................209

    Jerarquizando anotaciones ..................................212

    Distintos usos de las anotaciones .......................217

    Inyeccin de dependencias ..................................219

    Serializacin .......................................................220

    Mapeos a base de datos .......................................222

    Aplicaciones web .................................................223

    Resumen .............................................................223

    Actividades .........................................................224

    tcnicas y diseoInmutabilidad, Java Beans

    y la creacin de objetos ......................................226

    Inyeccin de dependencias

    e inversin de control .........................................233

    Sobre la creacin de objetos ..............................237

    Mtodo factora ...................................................237

    Factora abstracta ...............................................239

    Singleton .............................................................241

    Evitar utilizar null ...............................................243

    Representar conceptos con objetos ...................245

    Resumen .............................................................247

    Actividades .........................................................248

    reflexinQu es la reflexin? ...........................................250

    Las clases ...........................................................251

    Mtodos ..............................................................255

    Constructores .....................................................261

    Atributos ............................................................262

    Modificadores .....................................................264

    Interfaces ...........................................................265

    Clases anidadas ..................................................265

    Arrays .................................................................268

    Los ClassLoaders ................................................277

    Resumen .............................................................277

    Actividades .........................................................278

    Siguientes pasosTemas para seguir estudiando ............................280

    Desarrollo de aplicaciones para

    la consola de comandos ......................................296

    Desarrollo de aplicaciones de escritorio .............298

    Desarrollando aplicaciones

    para dispositivos mviles ....................................301

    Desarrollando aplicaciones web .........................303

    Otros lenguajes para la JVM ..............................307

    Resumen .............................................................308

    Servicios al lectorndice temtico ................................................. 310

    CAP12_DIAG 4

    Producto

    Construye

    Construye

    Producto

    ConstruyeConstruye

    Un Producto

    ConstruyeConstruye

    Un Producto

    Factora

    ConstruyeConstruye

    Factora

    Una Factora

    ConstruyeConstruye

    Una Factora

    Mtodo Factora

    Mtodo Factora

    00_Java_AJUSTADO.indd 11 8/25/11 1:02 PM

    www.FreeLibros.me

  • www.redusers.com

    PRELIMINARES12

    IntroduccinCmo funciona esto? Es posible hacer algo as? Estas son

    preguntas que todo aquel que se interesa por la tecnologa y

    la computacin se hace. Y estas inquietudes son las que nos

    llevan a embarcarnos en el camino de la programacin. Hoy en

    da las computadoras estn en todos lados y en todas partes.

    Cualquiera tiene los medios y la posibilidad de responder las

    dudas anteriores y de crear programas y herramientas que

    permitan mejorar el mundo. Cualquiera puede ser el autor de la

    prxima gran idea millonaria.

    La programacin orientada a objetos ha dominado el

    mercado por sobre otros paradigmas durante los ltimos

    veinte aos, y parece que va seguir dominndolo por mucho

    tiempo ms. En particular Java es el mximo referente de los

    programadores y existe una comunidad que constantemente

    genera productos, libreras y frameworks. Aun as, la demanda

    de nuevos programadores sigue creciendo. La orientacin

    a objetos encabeza la difcil tarea de transmitir ideas y de

    plasmarlas en la PC, de tal forma que un sistema pueda hacer

    lo que queramos de una manera sencilla y tangible.

    En este libro, el lector tendr la oportunidad de sumergirse

    en el paradigma; tomar sus ideas, sus reglas y sus metodologas.

    Luego, todos estos conocimientos se aplicarn a un lenguaje

    particular, en este caso, Java. Ir conociendo y aprendiendo

    el lenguaje paso a paso, desde su sintaxis y semntica, para

    escribir cdigo correcto y entender cmo plasmar y modelar

    adecuadamente las situaciones de nuestro inters. Para esto

    se usarn las herramientas provistas por el lenguaje, como las

    clases y la herencia, y tambin las interfaces y conceptos que

    provee Java. El lector est invitado a continuar, con la mente

    abierta a nuevas ideas, sin preconceptos ni prejuicios. Suerte.

    Ignacio Vivona

    00_Java_AJUSTADO.indd 12 8/25/11 1:02 PM

    www.FreeLibros.me

  • Servicio de atencin al lector: [email protected]

    Conocer los conceptos bsicos que corresponden a este

    paradigma de programacin es fundamental para poder

    entender y aplicar correctamente los conocimientos que

    iremos adquiriendo a lo largo del libro. En este captulo

    nos encargaremos de revisar y entender los alcances de la

    programacin orientada a objetos y su relacin con Java.

    Programacin orientada a objetos

    Historia .....................................14

    Conceptos ................................15

    Terminologa .................................... 17

    Polimorfismo ................................... 18

    Tipos y Subtipos ......................19

    Herencia ...................................21

    Herencia simple versus

    herencia mltiple ............................. 24

    Por qu objetos? ....................25

    Resumen ...................................27

    Actividades ...............................28

    01_Java_AJUSTADO.indd 13 8/29/11 8:12 AM

    www.FreeLibros.me

  • www.redusers.com

    1. ProgramaCin oriEntada a obJEtos14

    HistoriaLas races de la programacin orientada a objetos se remontan a

    los aos 60, con lenguajes como Algol 60 y Simula. Pero no es sino

    hasta los 70, cuando Alan Kay y su equipo empiezan a trabajar en

    la creacin del lenguaje Smalltalk, el momento en el cual se acua

    el trmino orientado a objetos. El lenguaje Smalltalk fue el pilar

    de este tipo de programacin y, actualmente, es uno de los pocos

    lenguajes puros, donde todo es un objeto. Se le dice puro a un lenguaje

    cuando todos sus elementos son objetos. Muchos lenguajes de este tipo

    no son puros (como Java) porque tienen elementos, como los nmeros,

    que no lo son. Esto crea una discontinuidad en el razonamiento, dado

    que hay que pensar en objetos y tambin tener en cuenta los elementos

    que no son objetos. Un lenguaje puro tiene un concepto uniforme, todos son objetos, y as facilita pensar los problemas y sus soluciones.

    Alan Kay y su equipo trabajaban en Xerox PARC (un centro de

    investigacin y desarrollo) y fueron pioneros en varias tecnologas

    que hoy en da son comunes. El sistema en el que trabajaban se

    denominaba Smalltalk, y se caracterizaba por ser un sistema operativo

    ms que un lenguaje de programacin. Fue el primero en tener

    ventanas, barras de desplazamiento, botones y hacer uso del mouse

    (aunque no fue inventado por ellos). Es un hecho que Steve Jobs, en

    una de sus visitas al Xerox PARC, vio Smalltalk y as surgi la Apple

    Lisa, la primera computadora personal con interfaz grfica.

    Smalltalk innov tambin en ser un lenguaje dinmico y reflectivo

    donde un usuario poda modificar el comportamiento de cualquier

    parte del sistema en tiempo de ejecucin (no haba un tiempo de

    compilacin como en otros lenguajes), de esta manera el sistema

    estaba constantemente vivo. Las capacidades reflectivas permitan

    razonar y manipularlo dinmicamente mientras estaba corriendo.

    De la comunidad Smalltalk tambin surgieron adelantos como los test unitarios (que veremos ms

    adelante) y los refactorings (cambios que mejoran el cdigo sin cambiar el comportamiento de ste),

    dos temas que han adquirido gran importancia en los ltimos aos. Y surgieron hace veinte!

    OtrOs apOrtes de smalltalk

    01_Java_AJUSTADO.indd 14 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    Java 15

    ConceptosLa programacin orientada a objetos se basa en dos conceptos bsicos:

    Hay objetos Solamente se comunican envindose mensajes

    Un objeto es una entidad que agrupa datos y funcionalidad. En este

    esquema los datos son otros objetos, que son referenciados a travs de

    un nombre, una etiqueta. Por ejemplo, un objeto Persona tiene como

    datos el nombre y la edad, estas son etiquetas que apuntan a los objetos

    correspondientes. Entendemos funcionalidad por lo que hace un objeto

    cuando recibe un mensaje, determinando su comportamiento.

    Siguiendo con el ejemplo de la persona, si se le enva el mensaje correr,

    esta empieza a correr. Esta idea difiere de otros lenguajes como C,

    Figura 1. As se vea la versin 80 de Smalltalk. Contaba con la posibilidad de manipular ventanas, iconos y otros elementos. Debemos saber que fue uno de los primeros sistemas en utilizar el mouse.

    01_Java_AJUSTADO.indd 15 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    1. ProgramaCin oriEntada a obJEtos16

    donde los datos y las funciones que operan sobre esos datos estn

    separados. Al estar contenidos en un objeto tanto los datos como la

    funcionalidad, se define as una frontera entre el interior y el exterior

    de este.

    Esta separacin asla tanto al interior de un objeto de otros objetos,

    como as tambin de sus asuntos internos . Este aislamiento favorece

    la reutilizacin (de conocimiento, secundariamente de cdigo), en la

    adaptacin a los cambios y la simplicidad. Todos estos beneficios surgen

    por la existencia de esta frontera y porque la nica forma posible de

    cruzarla sea el envo de mensajes. Se dice que un objeto encapsula

    datos y funcionalidad y que, adems, oculta su informacin, dado que

    solamente expone lo que quiere hacer pblico a otros objetos.

    El paradigma no explica nada acerca de su implementacin, de cmo

    son los objetos ni de qu forma se envan los mensajes. Tampoco

    hace mencin a clases ni a mtodos. Al ser tan simple y no imponer

    restricciones, existen diversos tipos de lenguajes orientados a objetos.

    Hay lenguajes que utilizan clases para agrupar y crear objetos, como

    en el caso de Java, otros utilizan prototipos, donde los objetos se

    copian de otros objetos base y, a su vez, toman cosas prestadas de ellos,

    como en el caso de Javascript. Algunos lenguajes como Java, Smalltalk

    y C++, ocultan el hecho de que se estn enviando mensajes, por temas

    de velocidad y simplicidad. Otros, en cambio, lo hacen explcito, por

    temas de paralelismo, y no se espera que la respuesta sea inmediata,

    Figura 2. Vista conceptual de objetos comunicndose. Los objetos interactan envindose mensajes, los cuales pueden llevar ms informacin (otros objetos) con ellos.

    un mensaje

    La respuesta

    un objeto otro objeto

    01_Java_AJUSTADO.indd 16 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    Java 17

    como Erlang. A partir de estos conceptos bsicos, se desprenden

    algunos otros que, generalmente, estn asociados a la programacin

    orientada a objetos: polimorfismo, tipos, subtipos y herencia.

    TerminologaDejemos claro algunos trminos antes de seguir. Llamaremos a la

    parte externa de un objeto, es decir, su frontera con el exterior, interfaz

    o protocolo. A los objetos, instancias, y cuando estemos en el contexto

    de clases, diremos que un objeto es instancia de una determinada

    clase. Una clase es un artefacto que proveen los lenguajes para

    construir tipos, que especifican el comportamiento de las instancias

    y las construyen. La forma en que un objeto responde a un mensaje

    es a travs de su implementacin, a la que llamaremos mtodo. Los

    mensajes pueden llevar consigo objetos, a estos los denominaremos

    colaboradores externos (al objeto receptor), y tambin parmetros

    o argumentos del mtodo. Debemos tener en cuenta que a los datos

    de un objeto, los que conoce por un nombre, los mencionaremos como

    colaboradores internos o variables de instancia.

    Figura 3. Vemos cmo un objeto es usado por muchos otros y cmo tambin puede utilizar distintos objetos, tomando como ejemplo los conceptos de encapsulamiento y ocultamiento de la informacin.

    un mensaje

    un saldo

    saldo

    depositar

    depositar $100

    extraer

    una cuenta

    01_Java_AJUSTADO.indd 17 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    1. ProgramaCin oriEntada a obJEtos18

    PolimorfismoEl polimorfismo es la caracterstica por la cual distintos objetos

    pueden ser intercambiados entre s, dado que responde a un cierto

    conjunto interesante de mensajes. Un objeto es polimrfico con

    otro objeto cuando ambos responden a un mismo mensaje (de formas

    distintas). El mensaje en cuestin es polimrfico y permite que

    Estos conceptos estn basados en la biologa celular, donde las clulas poseen una frontera llamada

    pared celular, la cual oculta y protege el interior de stas que se comunican entre s por medio de

    mensajes qumicos. En la pared celular se encuentran los receptores, que son protenas que le permiten recibir los mensajes qumicos. Dynamic dispatch en la naturaleza!

    Origen de la idea de ObjetOs y mensajes

    Figura 4. Un objeto reconoce a otros por medio de nombres. El protocolo establece qu mensajes entiende un objeto, y estos mensajes son los nicos elementos que permiten cruzar la frontera del objeto.

    $1500 saldo

    depositar

    protocolo

    argumento

    un monto

    mtodo

    saldo saldo unManto

    extraer

    Variablede instancia

    01_Java_AJUSTADO.indd 18 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    Java 19

    haya polimorfismo entre los dos (o ms) objetos. Es posible desde el

    momento que se desacopla el envo de mensajes, cuando se produce

    la recepcin de uno de ellos y viendo la forma en que acta el objeto

    receptor en consecuencia. Que la decisin de lo que se ejecuta cuando

    se recibe un mensaje sea independiente del envo de este, se conoce

    como dynamic dispatch (despacho dinmico).

    Tipos y SubtiposEl concepto de tipo est estrechamente ligado al paradigma de

    objetos, por ms que no sea exclusivo a l (proviene del mundo lgico-

    matemtico). Un tipo es un concepto que define un conjunto de objetos

    que comparten ciertas caractersticas (responden a un mismo conjunto

    de mensajes) que tienen sentido en un determinado contexto. Esto

    permite razonar sobre el conjunto, y todo lo que aplica a l aplica a

    cada integrante de este. Por ejemplo, si decimos que el tipo Nmero

    representa a todos los

    objetos que saben responder

    a la suma y la resta, entonces

    los objetos 1, o Pi al ser

    nmeros pueden ser usados

    en cualquier lugar que se

    necesite un nmero, ya que

    se pueden sumar y restar.

    Ahora, el nmero 1 es un

    entero, mientras que el

    nmero es una fraccin

    (racional) y Pi es uno real

    (irracional). Todos son

    nmeros, pero cada uno

    pertenece a un tipo especial,

    dado que tienen

    caractersticas distintas. Diremos entonces, que Entero, Fraccin y Real

    son subtipos de Nmero, dado que pertenecen a este grupo (se suman

    y restan) pero tambin tienen diferencias que forman un subconjunto

    dentro del conjunto ms grande. Por ejemplo, una fraccin puede

    1

    +_

    1/2

    +_

    +_

    nmero

    Figura 5. En esta imagen podemos ver al tipo denominado Nmero que se encarga de englobar otros nmeros.

    01_Java_AJUSTADO.indd 19 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    1. ProgramaCin oriEntada a obJEtos20

    responder a mensajes como numerador y denominador, pero un

    irracional no. Se dice que una Fraccin es una especializacin de

    Nmero. As, debemos tener en cuenta que Nmero es un supertipo de

    Fraccin y a su vez, Fraccin un subtipo de Nmero. Entonces,

    Nmero, Entero, Fraccin y Real forman una jerarqua.

    Un supertipo es ms abstracto que un subtipo mientras que el

    subtipo es ms concreto (especializado) que el supertipo. Abstraer

    significa que intencionalmente se dejan de lado ciertas caractersticas

    para poder as enfocarse en otras ms importantes (dependiendo del

    contexto) en un determinado momento. Por lo tanto es simple ver que

    para poder abstraer es necesario primero contar con las instancias

    concretas. Luego se realiza el trabajo intelectual de seleccionar las

    caractersticas comunes y dejar de lado las diferencias.

    Figura 6. En esta imagen podemos ver los diagramas correspondientes a jerarqua de nmeros y jerarqua de animales.

    1

    +_

    1/2

    +_

    +_

    nmeroanimal

    insecto

    mariposa hormiga vaca len

    mamfero

    No deberamos empezar pensando la abstraccin y luego las especializaciones. Ese proceso no

    funcionar porque seleccionaremos caractersticas que no son comunes o no seleccionaremos algunas

    que s lo sean. Es conveniente empezar por los casos concretos que nos guiarn en la construccin de

    una abstraccin cuando distingamos las caractersticas comunes entre ellos.

    CmO abstraer?

    01_Java_AJUSTADO.indd 20 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    Java 21

    HerenciaEn la programacin orientada a objetos se considera que una clase

    hereda de otra cuando la primera es un tipo de la segunda. Una clase

    es un artefacto de implementacin de tipo que permiten los lenguajes.

    Las clases forman jerarquas de herencia y se dice que cuando la clase

    Mamfero hereda de la clase Animal, Mamfero es una subclase de

    Animal y Animal es una superclase de Mamfero. En general, debemos

    saber que los lenguajes slo permiten heredar de una sola clase aunque

    hay algunos, como el lenguaje de programacin C++, que tienen

    herencia mltiple, o sea que una clase puede heredar de muchas otras.

    La subclasificacin se parece al subtipado aunque no hay que

    confundirse, la subclasificacin no fuerza al subtipado. Podramos

    tener una clase que hereda de otra, pero sin compartir entre ellas un

    concepto de tipo para crear una jerarqua de tipos. Veamos un ejemplo

    para que quede ms claro. Supongamos que tenemos la clase que

    representa a las listas que responden a los mensajes tamao?, elemento

    en la posicin X y agregar al final; y queremos tener la clase Pila

    (imaginemos una pila de platos), donde slo se puede poner arriba y

    sacar el de arriba. Si quisiramos implementar dicha clase, podramos

    Figura 7. Jerarqua de herencia entre clases. Primero un ejemplo de una jerarqua con herencia simple, luego otro donde hay herencia mltiple. En general la herencia mltiple resulta en jerarquas ms rebuscadas.

    vehculo

    vehculoterrestre

    auto vehculoanfibio

    barco

    vehculoacutico

    nmero

    entero

    natural

    fraccin

    herencia simple herencia compuesta

    01_Java_AJUSTADO.indd 21 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    1. ProgramaCin oriEntada a obJEtos22

    utilizar la clase lista que ya tenemos y reutilizarla. Si heredamos de

    lista, y hacemos que poner arriba use agregar al final, y sacar el de arriba use

    elemento en la posicin X ms tamao?, ya tendramos todo resuelto.

    Lamentablemente el resultado no sera una relacin de subtipado

    entre la lista y la pila, dado que la pila tambin sera una lista (podra

    responder a elemento en la posicin X), cosa que no correspondera con

    el concepto de pila. Es claro que una lista y una pila no forman una

    relacin de tipo, una pila no es una lista.

    Figura 8. Herencia entre Lista y Pila. Observamos las dos alternativas para implementar una pila, la herencia y la agregacin.

    sacar

    elemento En

    PILA

    LISTA

    poner

    agregar

    tamao

    elementos

    PILA LISTA

    elemento En

    agregar

    tamao

    sacar

    poner

    01_Java_AJUSTADO.indd 22 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    Java 23

    En general se considera mala prctica utilizar la subclasificacin

    para reutilizar implementacin sin formar una relacin de subtipado.

    Generalmente la tcnica que se utiliza para no crear ese tipo de

    jerarquas mal aplicadas es la agregacin.

    Debemos tener en cuenta que se llama agregacin cuando un objeto

    utiliza a otro. Se dice que un objeto tiene o usa otro.

    Veamos otro ejemplo: supongamos que tenemos Rectngulos y

    Cuadrados, y queremos que respondan al mensaje rea?. Ambos tipos

    son muy parecidos, podramos decir que un Cuadrado es un Rectngulo

    con los lados iguales o tambin que un Rectngulo es un Cuadrado con

    los lados desparejos. Podramos, entonces, elegir alguna de estas dos

    jerarquas para reutilizar el comportamiento. Cul conviene elegir?

    Viendo las diferencias entre los objetos, elegir heredar Rectngulo

    de Cuadrado parece una opcin sencilla, solo hay que agregar un

    Figura 9. Objetos que representan a un rectngulo y a un cuadrado. El rectngulo especializa al cuadrado agregando un colaborador extra para representar el lado distinto.

    ladolado 2

    RECTNGULO

    area

    lado

    CUADRADO

    area

    En su mayora, si una clase hereda mtodos que no tienen ninguna relacin con ella, que no aplican y que

    no forman parte de las responsabilidades que debera tener, entonces estamos frente a un mal uso

    de la herencia. Debemos evitar este tipo de jerarquas dado que generan productos de mala calidad. La

    forma correcta de aplicarlas es eliminando la herencia y utilizando la agregacin.

    jerarQUa mal UtiliZada

    01_Java_AJUSTADO.indd 23 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    1. ProgramaCin oriEntada a obJEtos24

    colaborador interno lado2 y cambiar el comportamiento del mensaje

    rea?. Detengmonos un momento a pensar, imaginemos que

    necesitamos un Cuadrado, y que al ser el Rectngulo subclase de

    Cuadrado, todo rectngulo es un cuadrado, de esta forma podramos

    usar un rectngulo en su lugar. Suena lgico esto? Claramente no.

    Veamos la otra opcin, si Cuadrado hereda de Rectngulo, usaramos

    slo un lado y modificaramos rea?, o podramos hacer que ambos

    lados sean iguales y no tendramos que modificar nada. Ahora si

    necesitamos un Rectngulo y tenemos un Cuadrado, no hay problema,

    dado que un cuadrado es un rectngulo vlido. Reutilizamos este

    conocimiento y la jerarqua estar basada en una relacin de tipos.

    Recordemos: siempre debemos preocuparnos de hacer que nuestras

    jerarquas estn basadas en una relacin de tipos.

    En el ejemplo anterior dijimos que un Cuadrado poda ir en lugar

    de un Rectngulo. Formalmente quisimos decir que el Cuadrado poda

    sustituir a un Rectngulo o, dicho de otra forma, que un Rectngulo

    es sustituible por un Cuadrado. La herencia fomenta el polimorfismo,

    porque generalmente los lenguajes tienen ciertas reglas que fuerzan

    a que las subclases puedan sustituir a las superclases. Qu significa

    sustituir? Significa que, cuando un objeto que usamos es sustituido

    por otro, esperamos que este objeto nuevo nos requiera lo mismo o

    menos y que nos d lo mismo o ms que el objeto que sustituy. De

    esta forma nuestras expectativas y nuestras colaboraciones con este

    objeto no se vern afectadas.

    Herencia simple versus herencia mltiple

    Si bien la mayora de los lenguajes orientados a objetos que se

    basan en las clases utilizan herencia simple, hay algunos otros que

    permiten heredar de muchas clases al mismo tiempo. El caso ms

    famoso es el lenguaje C++. Por qu existe la herencia mltiple? La

    herencia mltiple permite que las clases pertenezcan a distintas

    jerarquas adquiriendo el conocimiento, o sea reutilizando cdigo, de

    distintas clases. A primera vista nos puede parecer que es una ventaja

    contra la herencia simple, pero generalmente pasa que las jerarquas

    se deforman, y dejan de estar guiadas por relaciones de tipos para

    01_Java_AJUSTADO.indd 24 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    Java 25

    pasar a estar guiadas por la reutilizacin de cdigo. De esta forma, en

    su mayora terminan con complejas e inutilizables clases. Adems la

    herencia mltiple plantea ciertos problemas de implementacin que se

    desencadenan en errores molestos de corregir. El

    principal problema es en qu orden se hereda, es

    decir, qu clase tiene prioridad sobre otra, lo cual

    lleva a que algunas clases oculten o sobrescriban

    los mtodos de otras. Es difcil que el autor de

    una jerarqua haya preparado el diseo de esta

    para actuar junto con otra totalmente dispar,

    creada por otra persona. La gente que trabaja con

    este tipo de lenguajes es muy cuidadosa a la hora

    de utilizar la herencia mltiple y en lo posible

    tratan de evitarla. Por eso y por algunos otros

    problemas, la mayora de los lenguajes opta por la herencia simple

    (sumada a otros mecanismos) para la creacin de jerarquas de tipos.

    Por qu objetos?Cuando nos encontramos frente a un problema o una situacin

    que queremos entender, para luego resolver, creamos en nuestra

    mente un modelo que lo representa. Un modelo no refleja totalmente la problemtica. Nosotros mismos, al crear el modelo, elegimos

    enfocarnos en algunas caractersticas y dejamos otras de lado. Luego,

    operamos sobre este y contraponemos los resultados con el problema

    real. Es necesario tener en cuenta que, en base a las conclusiones que

    nos encargamos de obtener, volvemos al modelo y lo ajustamos para

    lograr mejores resultados la prxima vez.

    Para no restringir el tipado a la herencia simple, subclasificando innecesariamente, se usan las inter-

    faces (Java, las veremos ms adelante), los mixins (Ruby) o los traits (Smalltalk). Cada uno tiene

    ventajas y desventajas, respecto de la herencia mltiple, que permiten reutilizar y el tipado.

    ALTERNATIVAS A LA HERENCIA MLTIPLE

    LA MAYORIA

    DE LOS LENGUAJES

    OPTA POR LA

    HERENCIA

    SIMPLE

    01_Java_AJUSTADO.indd 25 8/29/11 8:12 AM

    www.FreeLibros.me

  • www.redusers.com

    1. ProgramaCin oriEntada a obJEtos26

    Figura 10. El ciclo de modelado y cmo interviene el paradigma. De toda la informacin que da el problema real, parte se deja de lado explcitamente y se focaliza en otra.

    PROBLEMAMODELOMENTE

    +PARADIGMA

    El paradigma de objetos es un filtro que se encuentra entre el

    problema y el modelo, que polariza el entendimiento de la situacin

    acomodndolo a sus conceptos. Afortunadamente, el paradigma de la

    orientacin a objetos permite que la interpretacin entre la realidad, la

    problemtica y el modelo sea muy fcil. Un objeto es tangible y es

    fcilmente relacionado a un elemento del dominio del problema, la carga

    mental que implica el pasaje del modelo al problema es imperceptible.

    Esta es la gran ventaja frente a otros paradigmas de programacin, dado

    que permite interpretar fcilmente la problemtica. Adems la

    comunicacin entre individuos que se manejen tanto en el modelo

    (programadores) como en la situacin de inters (clientes) es sencilla, ya

    que se maneja el mismo idioma en ambos mundos. Se dice que entre el

    modelo y el problema debe existir una relacin de isomorfismo.

    Un isomorfismo es una relacin entre dos elementos cuando ambos

    son indistinguibles, ambos cumplen las mismas propiedades y todo

    lo que es cierto para uno lo es para el otro, del mismo modo todo lo

    que es falso para uno lo es para el otro. Se dice que ambos elementos

    son isomorfos entre s. Por ejemplo, si estamos en el mbito bancario,

    tendremos un objeto Cuenta que representa una cuenta real en el

    banco. Entonces cuando el cliente diga cuenta nosotros entenderemos

    que se trata de un objeto de este tipo en forma inmediata. Y viceversa,

    cuando nosotros hablemos de una Cuenta, el cliente comprender, sin

    ningn inconveniente, que queremos decirle algo sobre una de ellas.

    De este ejemplo podemos sacar algunas conclusiones; no puede haber

    01_Java_AJUSTADO.indd 26 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    Java 27

    un elemento del modelo que represente a ms de un concepto del

    dominio por modelar. Tampoco lo opuesto, que un concepto del

    problema est representado por ms de un elemento del modelo.

    Figura 11. En esta imagen vemos el isomorfismo entre el modelo y el problema (primer ejemplo). As como tambin los casos que debemos evitar (los siguientes).

    PROBLEMAMODELO

    La programacin orientada a objetos se basa en que todo es un objeto y en que estos se comunican me-

    diante mensajes. Tiene poderosas ideas como el tipado y el polimorfismo. La mayora de la los lenguajes

    utilizan las clases para tipar y la herencia para subtipar. Existen lenguajes con herencia simple y otros con

    herencia mltiple, aunque tambin se utilizan otras alternativas para flexibilizar las jerarquas. Es importan-

    te entablar un isomorfismo entre los elementos del dominio y los elementos del modelo que realizamos.

    resUmen

    01_Java_AJUSTADO.indd 27 8/18/11 8:15 PM

    www.FreeLibros.me

  • www.redusers.com

    1. ProgramaCin oriEntada a obJEtos28

    test de aUtOeValUaCin

    1 Cules son los conceptos bsicos del paradigma?

    2 Qu es el encapsulamiento y el ocultamiento de la informacin?

    3 Qu beneficios traen el encapsulamiento y el ocultamiento de la informacin?

    4 Para qu sirven los tipos?

    5 Qu es el polimorfismo?

    6 Defina herencia.

    7 Diferencias entre el tipado y la clasificacin.

    8 Para qu se utiliza la agregacin?

    9 Qu condicin debe cumplir un modelo para ser una buena representacin?

    10 Por qu es necesario utilizar objetos?

    aCtiVidades prCtiCas

    1 Ingrese a la direccin www.smalltalk.org/smalltalk/history.html y lea The Early History of Smalltalk de Alan Kay (slo en ingls).

    2 Modele un tomo.

    3 Disee una molcula como subclase de tomo.

    4 Especifique una molcula como una agregacin de tomos.

    5 Relacione los tipos Animal, Mamfero, Ave, Pingino, Cndor y Elefante en relaciones de subtipos.

    Actividades

    01_Java_AJUSTADO.indd 28 8/18/11 8:15 PM

    www.FreeLibros.me

  • Servicio de atencin al lector: [email protected]

    Desde sus orgenes Java se ha difundido en diversos mbitos

    con el afn de consagrarse como la gran plataforma que es

    hoy. Antes de introducirnos por completo en la programacin

    Java necesitamos conocer su historia y las fuerzas que guiaron

    su creacin. Veremos tambin una introduccin a la forma

    de trabajo que adoptaremos a lo largo del libro, as como un

    breve vistazo a la tcnica de Test Driven Development en Java.

    Iniciacin a Java

    Historia .....................................30

    Preparacin ..............................32

    Eclipse IDE ..................................... 33

    Test Driven Development ................. 36

    Primeros cdigos .....................38

    Resumen ...................................43

    Actividades ...............................44

    02_Java_AJUSTADO.indd 29 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    2. iniciAcin A JAVA30

    HistoriaEl lenguaje de programacin Java tiene sus orgenes en el ao

    1991, cuando Sun empieza el proyecto Green. Este proyecto tena

    como objeto controlar dispositivos hogareos, para lo que crearon un

    lenguaje llamado Oak. Sun no tuvo xito, y no es hasta 1995 cuando el

    nombre es cambiado a Java y se lanza al mundo.

    Inicialmente, Java se lanz como un lenguaje cuyos programas

    podan correr en cualquier plataforma. El slogan de Sun era write

    once, run anywhere (escribir una vez, correrlo en cualquier parte).

    Para lograr esto Java corre sobre una mquina virtual o un programa

    que simula una mquina abstracta, la cual funciona aislando al

    programa que corre sobre ella de los distintos hardwares y sistemas

    operativos. De esta forma, para el programa que estamos utilizando, la

    maquina donde corre es siempre igual.

    James Gosling, padre de Java, lo hizo parecido a C++ para que

    los programadores de este lenguaje se sintieran cmodos con Java y

    optaran por l. Java ofreca a los programadores un lenguaje parecido

    a C++ pero simplificado (por ese entonces Java no posea genricos)

    y tena manejo automtico de memoria, es decir, que el programador

    no es el responsable de liberar la memoria que no usa. De esto se

    encarga una funcin de la mquina virtual llamada recolector de basura (garbage collector). El garbage collector es un proceso que se ejecuta

    paralelamente al de la aplicacin y se encarga de liberar la memoria

    ocupada por los objetos que no son utilizados por el sistema.

    Java siempre fue un lenguaje que triunf gracias a Internet. En un

    comienzo lo hizo a travs de las applets, pequeas aplicaciones

    embebidas en las pginas web que se ejecutan en los navegadores. En

    ese entonces las applets no triunfaron dado que competan con la

    tecnologa Shockwave, ahora conocida como Flash. A partir de 1997,

    En www.java.com/en/javahistory/timeline.jsp podemos ver una lnea temporal de los eventos im-

    portantes en la historia de Java y de aquellos del mundo tecnolgico que los acompaaron. La rpida

    evolucin del lenguaje y de las distintas tecnologas que se crearon a partir de l son evidentes.

    Lnea de tiempo de Java

    02_Java_AJUSTADO.indd 30 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    JAVA 31

    Java empez a migrar hacia los servidores. Se lanz la primera versin

    de los Servlets, componentes Java que corren en los servidores. En

    esta rea es donde este lenguaje se impuso y brill. Las tecnologas

    competidoras de ese entonces eran CGI, ASP y PHP. Java super a la

    competencia y se posicion como la tecnologa por excelencia para las

    aplicaciones web empresariales. Desde entonces Java es una de las

    tecnologas ms importantes, disponible en casi todas las plataformas.

    Se encuentra en las desktops (aplicaciones de escritorio), el los

    servidores (sirviendo pginas web y aplicaciones web) y hasta en los

    telfonos celulares (versin micro de Java).

    Ahora Java forma parte de uno de los sistemas operativos para

    celular ms famosos y pujantes que hay en la actualidad: Android.

    Este sistema operativo fue creado por los desarrolladores del

    famoso buscador Google; est basado en Java, por lo cual todas las

    aplicaciones para los celulares con Android estn hechas utilizando

    este lenguaje. No slo existen celulares con el sistema operativo

    Figura 1. Duke, la mascota de Java en los comienzos del lenguaje, fue muy popular y atrayente. Se lo poda ver en cada artculo, libro o sitio relacionado con este lenguaje.

    02_Java_AJUSTADO.indd 31 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    2. iniciAcin A JAVA32

    Android, sino smartphones, netbooks y tablets que tambin lo utilizan.

    En el 2009 Oracle, gigante de las bases de datos, compr Sun y, por lo

    tanto, tambin asumi la responsabilidad sobre la evolucin de Java.

    El futuro de Java es prometedor, ya que esta respaldado por gigantes

    de la informtica y por una enorme comunidad de programadores.

    PreparacinPara poder programar en Java, compilar y correr los programas,

    necesitaremos instalar el kit de desarrollo. Podemos conseguirlo en

    www.oracle.com/technetwork/indexes/downloads/index.html.

    Debemos asegurarnos de descargar la ltima versin del SDK,

    Software Development Kit (Kit de Desarrollo de Software), y no el JRE,

    Java Runtime Environment (Entorno de Ejecucin Java). El primero nos

    permitir crear y ejecutar aplicaciones Java, el segundo solamente

    correrlas. El ejecutable que descargaremos nos guiar durante la

    sencilla instalacin. Finalizada esta tendremos a nuestra disposicin

    los distintos programas para producir y ejecutar aplicaciones Java.

    El compilador correspondiente a este lenguaje: javac.exe (el cual se

    encarga de producir los binarios Java a partir del cdigo fuente), el

    intrprete java.exe (que ejecuta un programa Java) y el documentador

    javadoc.exe (el que se encargar de generar la documentacin necesaria

    para las clases) entre otros. Tambin encontraremos el profiler

    jvisualvm.exe, una herramienta que nos permitir medir la performace

    (tiempo de ejecucin y uso de memoria) de cualquier programa Java

    de una forma sencilla y visual. As mismo contaremos con las libreras

    base que trae Java por defecto y el cdigo fuente de estas, por si

    queremos ver cmo funcionan internamente.

    Tanto en la pgina donde descargamos el SDK cmo dentro de l, encontraremos ejemplos y tutoriales

    que nos ayudarn a profundizar los conocimientos que incorporaremos a lo largo del libro. Vale la pena

    mirar los ejemplos incluidos y probarlos, ya que utilizan muchas clases importantes de la librera base.

    tutoriaLes y eJempLos

    02_Java_AJUSTADO.indd 32 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    JAVA 33

    Eclipse IDEYa estamos en condiciones de empezar a programar nuestros

    primeros cdigos en Java. Podramos comenzar escribiendo con

    cualquier editor de texto y luego utilizar el compilador, programa que

    toma un archivo con cdigo fuente, lo transforma y genera otro que

    entiende la virtual machine (ms conocida como mquina virtual o tambin VM). Pero esta forma de trabajar solamente sirve para algunas

    pruebas sencillas, no slo es apta para realizar desarrollos

    profesionales. Por lo tanto tambin necesitaremos descargar un

    entorno de trabajo. Utilizaremos el IDE, Integrated Development

    Environment (Entorno de Desarrollo Integrado) llamado Eclipse.

    En www.eclipse.org encontraremos los enlaces para descargar el

    entorno de desarrollo ms famoso. Hallaremos los distintos sabores

    de Eclipse para poder desarrollar en diversas tecnologas desde Java,

    C++ y PHP hasta Javascript. All tambin encontraremos diversas

    herramientas para agregarle a nuestro IDE.

    Figura 2. En esta imagen podemos ver la vista de Java, se trata de la vista principal de Eclipse y es en la que ms se trabaja.

    02_Java_AJUSTADO.indd 33 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    2. iniciAcin A JAVA34

    Eclipse es el entorno de desarrollo Java por excelencia. Fue concebido

    como una plataforma para la creacin de IDEs, cuya expansin puede ser

    realizada mediante plugins. Inicialmente los lenguajes soportados eran

    Java y luego C++. Actualmente existe una amplia variedad de plugins

    para casi todos los lenguajes, y los lenguajes nuevos generalmente

    utilizan Eclipse dado que provee la infraestructura bsica para la

    creacin del IDE que requieren. Nosotros descargaremos la versin para

    Java Developers. El archivo posee una extensin .ZIP (archivo

    comprimido), que descomprimiremos en el lugar que queramos. Luego,

    no se requiere ms instalacin y, una vez descomprimida la carpeta,

    ejecutaremos el archivo llamado eclipse.exe (nos conviene crear un acceso

    directo desde el escritorio para futuros usos).

    Lo primero que veremos ser una ventana que nos preguntar

    donde queremos guardar el workspace (rea de trabajo). El workspace

    es un directorio donde Eclipse salvar los distintos proyectos en los

    que trabajemos. La pantalla de bienvenida nos recibe con ejemplos y

    Figura 3. Vista de Java Browsing focaliza la atencin en el rea de edicin y en la navegacin de paquetes, clases y mtodos.

    02_Java_AJUSTADO.indd 34 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    JAVA 35

    tutoriales, as como tambin con una visita a las caractersticas que

    ofrece la herramienta. Si elegimos ir al workbench (mesa de trabajo)

    nos encontraremos con la vista Java. Eclipse tiene el concepto de vistas

    para trabajar, cada vista es una configuracin de paneles y ventanas

    que permiten al usuario enfocarse en una determinada tarea.

    Para trabajar con Java tenemos tres vistas principales, la vista de

    Java, la vista de Java Browsing y la vista de Debug.

    En la vista de Java encontramos un explorador de paquetes (Pakage Explorer), fuentes Java y libreras del proyecto. Incluye tambin el

    panel de errores (Problems), donde Eclipse nos informar de aquellos

    relacionados con el proyecto (libreras que faltan, errores sintcticos en

    los cdigos fuente, etc.). El panel del esquema (Outline) de las clases y

    paquetes tambin est presente. Podemos darnos cuenta de que la

    parte central de la vista est destinada a la edicin de cdigo.

    La segunda vista, la de Java Browsing, est enfocada en el trabajo con

    las clases y nos recuerda al entorno de trabajo clsico de Smalltalk. En

    Figura 4. La vista de Debug permite que seamos testigos de qu ocurre durante la ejecucin de nuestro cdigo.

    02_Java_AJUSTADO.indd 35 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    2. iniciacin a java36

    esta vista nos encontramos con paneles en la parte superior, y el resto

    del espacio es destinado a la edicin de los cdigos fuente. Los cuatro

    paneles son: el de proyecto (Proyects), el de paquete (Packages), el de

    clases (Types, que presenta las distintas clases dentro del paquete) y

    el de miembros (Members, que se encarga de

    mostrar los elementos que conforman la clase

    seleccionada en el panel anterior).

    Finalmente, la vista de Debug, se activa

    cuando la ejecucin (lanzada en modo Debug)

    alcanza un breakpoint (punto de frenado) en

    el cdigo. En ella podemos hacer avanzar la

    ejecucin, detenerla, inspeccionar qu objetos

    estn siendo usados en un determinado

    momento y hasta modificarlos. Debemos tener

    en cuenta que esta es la vista que ms usaremos

    cuando queramos determinar en forma exacta qu est haciendo el

    cdigo y por qu no hace lo que nosotros queremos.

    Test Driven DevelopmentA lo largo del libro trabajaremos utilizando JUnit. JUnit es un

    herramienta (que usaremos a travs de Eclipse) para trabajar aplicando

    una metodologa conocida como Test Driven Development (TDD)

    o Desarrollo Guiado por Pruebas. TDD es un estilo para plantear

    el desarrollo de un software, que se basa en el hecho de que el

    programador vuelca su conocimiento sobre determinado problema en

    forma de aserciones. El programador debe codificar lo necesario para

    validar estas aserciones que enunci anteriormente. Cuando todas sean

    Si estamos posicionados dentro de un mtodo y presionamos las teclas CTRL y la BARRA ESPACIADORA,

    se accionar el autocomplete. Esta funcionalidad, dependiendo del contexto, nos muestra qu elementos

    tenemos a disposicin, ya sean clases, atributos o mtodos (de instancia y estticos). Tambin nos da

    ms informacin sobre los mtodos, como su tipo de retorno y los parmetros que acepta.

    Autocomplete en eclipse

    Usar EclipsE

    agiliza mUcha El

    dEsarrollo ya qUE

    intEgra mUchas

    hErramiEntas

    02_Java_AJUSTADO.indd 36 8/29/11 8:15 AM

    www.FreeLibros.me

  • www.redusers.com

    JAVA 37

    vlidas debe seguir explorando el dominio del problema agregando ms

    aserciones. Cuando alguna resulte falsa, debe codificar para hacerla

    verdadera. Finalmente, el programador refactoriza el cdigo y lo repara

    buscando abstracciones, de forma de simplificarlo pero procurando

    que el comportamiento no cambie; las aserciones

    deben continuar siendo vlidas.

    TDD ofrece una forma de abordar el problema

    de manera exploratoria, usando ejemplos

    (aserciones). Esto es ms fcil que tratar de

    resolver el problema en abstracto y para todos los

    casos. As mismo TDD hace que el programador

    sea el usuario de su propio cdigo primero,

    logrando que l mismo pueda darse cuenta de cun

    amigable y fcil de usar es el API desarrollado,

    tambin facilita el mantenimiento del software. El

    software, por su naturaleza, est en constante cambio. Estos cambios

    tienen que ser codificados e introducidos en el cdigo existente sin

    afectar involuntariamente al resto de las funcionalidades del sistema.

    As, los test sirven como red de seguridad, dado que podremos verificar

    rpida y sistemticamente el correcto funcionamiento de la aplicacin.

    JUnit es la herramienta clsica, originaria de Smalltalk, para realizar

    TDD en Java (otra conocida es TestNG). Aparece de la mano de Kent

    Beck, el creador del Extreme Programming (Programacin Extrema),

    y luego es migrada a Java y a casi todo lenguaje existente.

    En JUnit se definen casos de prueba, representados por una clase que

    contiene mtodos de prueba. Cada uno de estos mtodos tiene el objetivo

    de probar uno o algunos ejemplos y aserciones. JUnit luego ejecuta los

    casos y genera un reporte que informa cules pasaron exitosamente

    y cules fallaron o dieron error. En Eclipse contamos con un plugin ya

    instalado que nos permite utilizar JUnit con unos pocos clics.

    BDD (desarrollo guiado por comportamiento) es una extensin a TDD que hace foco en escribir los test en

    un lenguaje cercano al natural, con las especificaciones obtenidas del cliente y las que este puede entender.

    De esta forma, la brecha entre el programador y el cliente se reduce, ya que comparten un mismo lxico.

    Bdd o Behavior driven deveLopment

    los tEsts

    forman Una rEd

    dE sEgUridad

    al momEnto dE

    cambiar El cdigo

    02_Java_AJUSTADO.indd 37 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    2. iniciAcin A JAVA38

    Primeros cdigosVamos a trabajar en nuestros primeros cdigos en Java. Para eso

    necesitamos crear un proyecto donde escribirlos. Ser necesario que

    iniciemos Eclipse y posteriormente hacer clic en el men File o sobre

    el botn New que se encuentra en la barra de herramientas. Tambin

    podemos hacer clic con el botn derecho del mouse en el Package

    Explorer y seleccionar la opcin New/Java Project.

    Debemos elegir un nombre para el proyecto y escribirlo en la

    ventana adecuada, luego presionar sobre Finish.

    Con esto conseguiremos tener un proyecto y dentro de l la

    carpeta src que ser donde alojaremos los archivos fuentes. En forma

    predeterminada Eclipse agrega como dependencia las libreras que

    vienen con la instalacin de Java. El paso siguiente es crear nuestro

    primer caso de prueba (test case). En Java todo cdigo tiene que estar

    contenido en una clase, nuestro test case no ser la excepcin.

    Para crear un test case, en el men File seleccionamos New/JUnit

    Test Case, elejimos la versin de JUnit que usaremos (JUnit 4), un

    nombre de package (red.user.java) y un nombre para el Test Case

    (UnitTests). Luego presionamos el botn Finish.

    Eclipse alertar que no tiene la librera incluida y preguntar si

    queremos agregarla, seleccionamos la opcin OK.

    Figura 5. Pantalla de creacin de proyectos Java. De forma sencilla a travs de las opciones que ofrece el asistente, podemos controlar cada parmetro de la creacin.

    02_Java_AJUSTADO.indd 38 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    JAVA 39

    Figura 6. La pantalla de

    creacin de test cases nos permite elegir la versin de

    JUnit con la que queremos trabajar

    y la creacin de mtodos auxiliares

    para los test.

    Tenemos ya nuestra primera clase, que es un test case. Ahora vamos a

    hacer una simple prueba, veamos si efectivamente cuando sumamos uno

    ms dos obtenemos tres. Para esto debemos escribir el siguiente cdigo:

    package red.user.java;

    import org.junit.Test;

    import static org.junit.Assert.*;

    public class Cap2UnitTests {

    }

    @Test public void testAdd() {

    assertEquals(1+2, 3);

    }

    }

    En www.junit.org podemos encontrar ms informacin sobre JUnit, con documentacin y ejemplos que

    nos ayudarn a mejorar la forma en que hacemos los test. La seccin de preguntas y respuestas es un

    buen punto de partida para resolver todas las dudas que tengamos sobre los test. Tambin podemos

    bajar el cdigo fuente y aprender del funcionamiento interno de JUnit.

    Junit

    02_Java_AJUSTADO.indd 39 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    2. iniciAcin A JAVA40

    Figura 7. En esta imagen vemos como luce nuestro cdigo en Eclipse, notemos los distintos estilos que utiliza el IDE para diferenciar los elementos que conforman el cdigo escrito.

    La palabra class seguida del nombre de la clase indica el inicio de

    esta. Luego tenemos el mtodo, cuyo nombre es testAdd, que no

    devuelve ninguna respuesta (void) y que est marcado como un

    mtodo de test (anotacin @Test). En el cuerpo del mtodo tenemos

    una asercin que dice: Son iguales 3 y 1+2?. Para saber si es as,

    vamos a ejecutar el test y ver qu resulta.

    Presionamos el botn derecho sobre la clase y seleccionamos Run

    As/JUnit Test. Aparece entonces el llamado runner de JUnit que nos

    mostrar una barra verde si todo sali bien o roja si algo fall.

    Si nos dirigimos con nuestro navegador al sitio web que se encuentra en la direccin www.javaworld.

    com encontraremos abundante informacin sobre este lenguaje. All hallaremos las ltimas noticias,

    artculos, tutoriales y tambin enlaces a distintos blogs que nos sern de gran utilidad y nos mantendrn

    actualizados sobre los temas ms calientes del ambiente Java.

    Java WorLd

    02_Java_AJUSTADO.indd 40 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    JAVA 41

    Figura 8. Al correr un test case el resultado se ve reflejado en el panel del runner de JUnit. Si la barra es de color verde, todos los test pasaron, si es roja, significa que alguno fall.

    Ahora investiguemos con ms profundidad qu hemos escrito y

    cmo es que funciona:

    package red.user.java;

    Todo archivo fuente Java define una clase, toda clase pertenece a

    un paquete. Un paquete es una forma de agrupar las clases en grupos

    que tengan cierto sentido. Se estila que el prefijo del paquete sea el

    dominio web de la organizacin a la que pertenece en orden inverso

    Los lenguajes que no utilizan este mecanismo para administrar la memoria, como C++, requieren que el

    programador, manualmente libere la memoria que no se va a utilizar ms. Esta tarea manual es la cau-

    sante de muchos errores en los programas y del consumo de mucha memoria. Aquella que no se libera,

    pero tampoco se usa, se conoce como memory leak.

    GarBaGe coLLector

    02_Java_AJUSTADO.indd 41 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    2. iniciAcin A JAVA42

    (ejemplo: com.google). En nuestro cdigo definimos el paquete red,

    dentro de l el subpaquete user y dentro de ste el subpaquete java.

    Java fuerza a que cada paquete est representado por un directorio en

    el sistema de archivos. En nuestro caso Eclipse automticamente crea

    un directorio red, dentro de l otro llamado user, adentro uno llamado

    java y, finalmente, dentro de java el archivo Cap2UnitTests.java.

    import org.junit.Test;

    import static org.junit.Assert.*;

    Estas sentencias indican que queremos importar la clase Test,

    localizada en el paquete org.junit y tambin todos los mtodos estticos

    (que pertenecen a la clase y no a las instancias de ella) de la clase

    Assert. En Java los mtodos conocidos como estticos, veremos ms

    adelante, son distintos de los de instancias.

    public class Cap2UnitTests

    Indica que estamos definiendo la clase Cap2UnitTests. Todo lo que est

    entre la primera { y la ltima } corresponde con el cuerpo de la clase.

    @Test public void testAdd()

    Aqu definimos el mtodo que ejecutarn las instancias de la

    clase Cap2UnitTests cuando se les enve el mensaje testAdd. Primero

    tenemos la anotacin @Test que indica que el mtodo es un test. Las

    anotaciones son un artefacto de Java para agregar informacin sobre

    Es muy interesante tener en cuenta que hasta las versin 4, JUnit utilizaba la herencia para definir un

    test case basndose en la clase TestCase. Recordemos que dicha clase se encargaba de realizar la

    definicin de los distintos mtodos de asercin. Los mtodos de test se reconocan dado que requeran

    obligatoriamente que tuvieran el prefijo test. En las nuevas versiones de Junit esto se flexibiliz al hacer

    uso de las anotaciones, de esta forma tenemos ms flexibilidad a la hora de trabajar.

    versiones anteriores de Junit

    02_Java_AJUSTADO.indd 42 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    JAVA 43

    los distintos elementos del lenguaje, llamamos a esta informacin

    metadata. Metadata significa datos sobre los datos, datos que dicen

    algo respecto de los datos. Meta significa hablar en un nivel superior.

    La anotacin dice que el mtodo es un test, no dice nada de lo que

    hace, de eso habla el mtodo en s. Luego el mtodo esta marcado

    como pblico, lo que significa que puede ser invocado (o sea que se les

    puede mandar el mensaje a las instancias) desde instancias de otras

    clases. Como ya dijimos anteriormente, el mtodo no devuelve ninguna

    respuesta, de ah que est marcado como void. Al igual que en la clase,

    el cuerpo del mtodo esta demarcado con las llaves.

    assertEquals(1+2, 3);

    Finalmente tenemos la asercin. En ella encontramos la invocacin

    al mtodo esttico (perteneciente a la clase Assert, recordemos el

    import static) assertEquals. Este mtodo recibe dos parmetros que

    compara para saber si son iguales o no. En este caso recibe el resultado

    de evaluar 1+2 (en Java esto no es un envo de mensaje, sino que lo

    ejecuta directamente la mquina virtual) y el nmero 3. En Java, as

    como en muchos otros lenguajes, se evalan primero los parmetros y

    luego con los resultados se enva el mensaje.

    A travs de este captulo pudimos conocer la historia de Java as como tambin algunas circunstancias

    que rodearon su aparicin. Aprendimos los alcances de este lenguaje y vislumbramos el potencial que

    alcanza el tope de las grandes empresas desarrolladoras de software. Para continuar analizamos las

    caractersticas del entorno de desarrollo con la integracin de Eclipse y lo utilizamos para crear nuestra

    primera aplicacin, de esta forma, nos acercamos a la programacin con Java.

    resumen

    02_Java_AJUSTADO.indd 43 8/18/11 8:26 PM

    www.FreeLibros.me

  • www.redusers.com

    2. iniciAcin A JAVA44

    test de autoevaLuacin

    1 Qu es una mquina virtual?

    2 Por qu triunf Java frente a otras tecnologas?

    3 Cul es la diferencia entre el JRE y SDK?

    4 Qu es y para qu sirve Eclipse?

    5 Qu es TDD?

    6 Cul es el principal beneficio de desarrollar utilizando TDD?

    7 Que se utiliza JUnit?

    8 Cmo se define un test case en JUnit?

    9 De qu manera se define un test en JUnit?

    10 En qu clase estn definidas las aserciones?

    actividades prcticas

    1 Investigue qu errores nos muestra Eclipse (en el panel de Problems, al salvar el cdigo fuente) cuando borra distintas partes del cdigo.

    2 Trate de utilizar el compilador del SDK para el test que realizamos.

    3 Pruebe ejecutar el resultado de la compilacin con el comando java. Le dar error.

    4 Cambie el test case que ya tiene, agregando nuevos mtodos de test con diferentes aserciones. En el cdigo fuente, dentro del mtodo presione CTRL + BARRA ESPACIADORA para hacer aparecer el autocomplete y as ver las distintas clase de aserciones que hay.

    5 Haga doble clic sobre el costado gris izquierdo del mtodo, aparecer un circulo azul, esto indica un breakpoint. Ejecute el test case en modo debug, eligiendo Debug en vez de Run Vea qu sucede.

    Actividades

    02_Java_AJUSTADO.indd 44 8/18/11 8:26 PM

    www.FreeLibros.me

  • Servicio de atencin al lector: [email protected]

    La sintaxis es el conjunto de reglas que dan como resultado un

    programa bien escrito. Estas reglas describen qu elementos

    estn permitidos en determinados contextos y cul es la

    relacin entre ellos. En este captulo nos encargaremos de

    conocer y analizar la sintaxis bsica que necesitamos para

    dominar la programacin en Java y de esta forma comenzar a

    dar los primeros pasos en este interesante mundo.

    Sintaxis

    Palabras claves .........................46

    Ciclos ........................................52

    Declaraciones, expresiones,

    sentencias y bloques ................58

    Variables.......................................... 58

    Sentencias ....................................... 60

    Otras estructuras .....................60

    Tipos primitivos y literales ......67

    Operadores ...............................70

    Paquetes ..................................72

    Resumen ...................................73

    Actividades ...............................74

    03_Java_AJUSTADO.indd 45 8/18/11 8:37 PM

    www.FreeLibros.me

  • www.redusers.com

    3. sintaxis46

    Palabras clavesLas palabras claves o reservadas son palabras que Java no permite

    que los programadores utilicen libremente en cualquier parte del

    cdigo (por ejemplo, los nombres de variables), sino que tienen un

    propsito determinado y un contexto especfico. Eclipse nos indicar

    que una palabra est reservada porque estar resaltada con un color

    distinto del texto normal. A continuacin encontraremos el listado de

    palabras claves, su explicacin y uso:

    abstract: se utiliza en clases y mtodos para indicar que son abstractos. Debemos tener en cuenta que en las clases esto significa

    que sirven para formar una jerarqua y no pueden tener instancias.

    En los mtodos sirve para indicar que la jerarqua que tiene

    responde al mensaje, pero no define cdigo alguno.

    assert: se utiliza para enunciar condiciones que se deben cumplir durante la ejecucin. No confundir con las aserciones de JUnit.

    boolean: se encarga de representar al tipo primitivo booleano. Las variables de este tipo no son objetos y los nicos valores que

    pueden tomar son true (verdadero) y false (falso).

    break: es una etiqueta que se utiliza para salir de la ejecucin de los ciclos (for, while, do while) y de las estructuras switch (ambas

    las veremos en detalle ms adelante).

    byte: representa el tipo primitivo de nmeros de 8 bits, entre -128 y 127. Lo valores de este tipo no son objetos.

    case: etiqueta usada en las estructuras switch para indicar un caso. catch: se utiliza en conjunto con la etiqueta try para indicar que

    se espera una excepcin (las veremos ms adelante) en el cdigo

    envuelto en la estructura del try.

    Es interesante recordar que toda variable en el lenguaje de programacin Java tiene un valor por defecto

    al momento de su creacin, de esta forma nunca obtendremos una variable vaca al momento de crearla.

    En este sentido, los tipos primitivos numricos y carcter se inicializan con el valor 0 mientras que los

    datos que corresponden al tipo denominado boolean se inicializan con el valor false. Por otra parte,

    cualquier referencia a objeto se inicializa con el valor null.

    Valores por defecto

    03_Java_AJUSTADO.indd 46 8/18/11 8:37 PM

    www.FreeLibros.me

  • www.redusers.com

    Java 47

    char:seencargaderepresentareltipoprimitivodeloscaracteres.LasvariablesquecorrespondenaestetiponosonobjetosydeestaformapuedencontenercualquiercarcterUnicode.

    class:defineelcomienzodeladeclaracindeunaclase. continue:aligualqueelbreak,esunetiquetaqueseutilizaenlos

    ciclosysirveparahacerqueseinterrumpalaejecucindelcdigodelaiteracinactualdelcicloyquecontineconlasiguiente.

    default:puedeserutilizadaparadefinirunalaaccinpordefectoenlasestructurasswitch.

    do:debemostenerencuentaqueseutilizaencombinacinconelwhileparaformarlaestructuradeciclodowhile.

    double:representaeltipoprimitivodelosnmerosdepuntoflotantededobleprecisin(64bits)definidosenelestndarIEEE 754.

    else:seencargaderepresentarelcaminoalternativoenunatomadedecisin,seutilizaenconjuntoconelllamadoif.

    enum:nospermitedeclararuntipoenumerado,clasesquetienenunnmerofijoydefinidodeinstanciasnombradas.

    extends:seutilizaparaindicarqueunaclaseheredadeotra.Sinoseutiliza,pordefectotodaclaseheredadelaclaseObject.Tambinseutilizaparadeclararqueunainterfazextiendeotra(herenciaentreinterfaces).

    final:esunmodificadorquepuedeaplicaraclases,mtodosvariablesyargumentos,ypuedetenerunsignificadodistintoencadacaso.Enlasclasessignificaquesepuedeextenderheredando.Encasodelosmtodos,quelassubclasesdelaclasequelocontienenopuedenredefinirlo.Enlasvariables(tantolasdeinstanciacomolasdeclase,ascomoenlasdefinidasenelcuerpodelosmtodos)significaquesepuedeasignarvalorslounavez.Finalmente,enelcasodelosargumentosdelosmtodos,quieredecirqueesavariablenosepuedeescribir(reasignarleunvalornuevo).

    finally:recordemosqueseseusaenconjuntoconlaestructuratry,yseencargadeespecificarunbloquedecdigoqueseejecuta,sos,alfinalizarlaejecucindelbloquetry.

    float:representaaltipoprimitivodelosnmerosdepuntoflotantedesimpleprecisin(32bits)definidosenelestndarIEEE 754.

    Las paLabras

    reservadas

    no se pueden

    utiLizar

    Libremente

    03_Java_AJUSTADO.indd 47 8/31/11 5:04 PM

    www.FreeLibros.me

  • www.redusers.com

    3. sintaxis48

    for: es la etiqueta que define a la estructura de ciclo ms usada. if: especifica una bifurcacin en la ejecucin del cdigo guiada

    por una condicin. Si la condicin en verdadera (true) entonces se

    ejecuta el cuerpo del if, si no se lo saltea.

    implements: se trata de la manera de indicar que una clase implementa (hereda) de una o varias interfaces. La clase est

    obligada a implementar los mtodos definidos por las interfaces

    que utiliza (a menos que sea una clase abstracta, en cuyo caso las

    encargadas sern las subclases que corresponden).

    import: declara el uso (importacin) de clases y paquetes en un cdigo fuente. Mediante el agregado del modificador static, tambin

    se pueden importar mtodos estticos de una clase.

    instanceof: instruccin que sirve para preguntar si un objeto es instancia de una determinada clase (o superclase) o interfaz. El

    resultado que se presenta es el valor true o false.

    int: representa el tipo primitivo de nmeros de 32 bits, entre -2147483648 y 2147483647. Lo valores de este tipo no son objetos. interface: especifica el comienzo de la definicin de una interfaz. long: se encarga de representar el tipo primitivo de nmeros

    de 64 bits, se encuentran entre -9223372036854775808 y

    9223372036854775807. Lo valores de este tipo no son objetos.

    native: modificador de mtodo que indica que este no est implementado en Java sino en otro lenguaje, generalmente en C++. Se

    utiliza para hacer que Java se comunique con el exterior de la mquina

    virtual (por ejemplo, para acceder al sistema de archivos o a la red).

    new: es el operador de creacin de instancias. Se utiliza junto con el nombre de la clase no abstracta que se quiere incluir en la creacin

    de la instancia y los parmetros necesarios para la inicializacin de

    esta. Como resultado se obtiene una nueva instancia de la clase.

    Tengamos en cuenta que esta tcnica es muy utilizada para cuando queremos acceder a enviar mensajes

    a un objeto en una condicin, pero no sabemos si la referencia esta apuntando correctamente (o sea,

    no utilizamos el valor null en esta operacin). Recordemos que la estructura