Download introducción a las técnicas de programación

Document related concepts
no text concepts found
Transcript
Instituto de Educación Superior
“San Ignacio de Monterrico”
INTRODUCCIÓN
Hace quince años, mencionar la palabra “Java” traía a la mente una de dos cosas: Una
Isla de Indonesia o una taza de café caliente. Hoy, quienquiera que haya tenido contacto
con una página Web, alguna revista de computación, o una sección de negocios de algún
diario, tiene otro concepto de Java: el lenguaje de Programación introducido por Sun
Microsystems.
Se pueden encontrar películas en los principales videoclubes, atletas en una intriga de
crímenes y políticos corruptos que han recibido menor atención que Java. El lenguaje ha
llegado a ser parte del desarrollo de software, como el líquido mismo del hombre.
Por una parte Java mantiene despiertos a los programadores hasta tarde, mientras que
ha otros permite dormir mejor después de una jornada de desarrollo de programas.
Al redactar este manual usted será guiado por todos los aspectos del desarrollo de
programas Java mediante la versión más actual del lenguaje y las mejores técnicas
disponibles.
Cuando termine de leer este manual, tendrá razones bien fundamentadas por las que
Java ha llegado a ser el lenguaje de programación más comentado durante las últimas
décadas y las razones de por qué podría ser el lenguaje de programación de mayor uso
en los próximos años.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
1
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 1
INTRODUCCIÓN A LAS TÉCNICAS DE PROGRAMACIÓN
Formando Emprendedores De Calidad Para Un Mundo Empresarial
2
Instituto de Educación Superior
“San Ignacio de Monterrico”
Para empezar a entender lo que es la programación, primero tenemos que tener ciertos
conocimientos sobre todo lo que la rodea. Empezaremos con unas definiciones un poco
técnicas, pero que son imprescindibles para el aprendizaje.
1.1 CONCEPTOS GENERALES
Tecnología
Dentro del campo que nos interesa a nosotros, la tecnología tiene el objetivo de eliminar
las tareas repetitivas, facilitando el trabajo y haciéndolo más eficiente así como
aumentando la productividad y los beneficios de la empresa.
Programación
La programación es una de las etapas más importantes del ciclo de vida de un proyecto
(explicaremos más adelante lo que es este termino), y requiere un método de trabajo. La
programación es el resultado de dicho trabajo. La programación es el instrumento que
permite la ejecución de las tareas automatizadas de un sistema informático.
Las herramientas que utilizaremos para programar son los lenguajes de programación, a
través de las cuales codificaremos los programas.
Programa
Conjunto de instrucciones entendibles por el ordenador que permiten realizar un trabajo o
resolver un problema. Un programa debe ser finito, es decir, tiene que tener un inicio y
Formando Emprendedores De Calidad Para Un Mundo Empresarial
3
Instituto de Educación Superior
“San Ignacio de Monterrico”
un fin. Tiene que estar bien confeccionado para que, al introducir un dato, salga una
solución y si se volviese a introducir el mismo dato, saliese de nuevo la misma solución.
Metodología de la programación
Se entiende como metodología de la programación al conjunto de normas, métodos y
anotaciones que nos indican la forma de programar. Cada lenguaje de programación
sigue una metodología distinta.
Lenguaje de programación
Es un conjunto de reglas semánticas así como sintácticas que los programadores usan
para la codificación de instrucciones de un programa o algoritmo de programación.
Existen varios lenguajes de programación.
Entorno de programación o entorno de desarrollo
Es el conjunto de herramientas utilizadas para la elaboración de un programa.
Recursos
Conjunto de componentes hardware que utilizaremos para la elaboración de un programa
(cpu, disco duro…..).
Una vez conocidos los conceptos básicos necesarios para el aprendizaje de la
programación podemos empezar a ver los diferentes tipos de lenguajes de programación.
1.2 OBJETIVOS E IMPORTANCIA DE LAS TÉCNICAS DE PROGRAMACIÓN
El curso de Técnicas de programación esta dedicado a mejorar las capacidades analítica
y creadora de los programadores explicando las bases de la programación y la creación
de algoritmos.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
4
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 2
TEORIA DE LOS ALGORITMOS
Formando Emprendedores De Calidad Para Un Mundo Empresarial
5
Instituto de Educación Superior
“San Ignacio de Monterrico”
El desarrollo de algoritmos es un tema fundamental en el diseño de programas o
soluciones. Por lo cual, el alumno debe tener buenas bases que le sirvan para poder
crear de manera fácil y rápida sus programas.
La siguiente documentación pueden servirá a los alumnos, en su labor cotidiana de
aprendizaje y también facilitará el desarrollo de su capacidad analítica y creadora, para
de esta manera mejorar su destreza en la elaboración de algoritmos que sirven como
base para la codificación de los diferentes programas que tendrá que desarrollar a lo
largo de su carrera.
2.1 CONCEPTO DE GORITMO
La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi,
nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación
de números y ecuaciones en el siglo IX.
Un algoritmo es una serie de pasos organizados que describe el proceso que se debe
seguir, para dar solución a un problema específico.
2.2 TIPOS DE ALGORITMOS
Existen dos tipos y son llamados así por su naturaleza:
Formando Emprendedores De Calidad Para Un Mundo Empresarial
6
Instituto de Educación Superior
“San Ignacio de Monterrico”
Cualitativos:
Son aquellos en los que se describen los pasos utilizando palabras.
Cuantitativos:
Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.
2.3 LENGUAJES ALGORÍTMICOS
Un Lenguaje algorítmico es una serie de símbolos y reglas que se utilizan para describir
de manera explícita un proceso.
2.4 TIPOS DE LENGUAJES ALGORÍTMICOS
2.4.1 Gráficos
Es la representación gráfica de las operaciones que realiza un algoritmo (diagrama de
flujo).
Diagrama de Flujo
Un diagrama de flujo es la representación gráfica de un algoritmo. También se puede
decir que es la representación detallada en forma gráfica de como deben realizarse los
pasos en la computadora para producir resultados.
Esta representación gráfica se da cuando varios símbolos (que indican diferentes
procesos en la computadora), se relacionan entre si mediante líneas que indican el orden
en que se deben ejecutar los procesos. Los símbolos utilizados han sido normalizados
por el instituto norteamericano de normalización (ANSI):
Formando Emprendedores De Calidad Para Un Mundo Empresarial
7
Instituto de Educación Superior
“San Ignacio de Monterrico”
Símbolo
Descripción
Indica el inicio y el final de nuestro
diagrama de flujo.
Indica la entrada y salida de datos.
Símbolo de proceso y nos indica la
asignación de un valor en la memoria y/o la
ejecución de una operación aritmética.
Indica
la
salida
de
información
por
impresora.
Conector dentro de página. Representa la
continuidad del diagrama dentro de la
misma página.
Conector fuera de pagina. Representa la
continuidad del diagrama en otra pagina.
Indica la salida de información en la
pantalla o monitor.
Símbolo de decisión. Indica la realización
de una comparación de valores.
Símbolo de Selección Múltiple. Dada una
expresión permite escoger una opción de
muchas.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
8
Instituto de Educación Superior
“San Ignacio de Monterrico”
Símbolo del Mientras. Dada una expresión
al principio de la iteración esta es evaluada;
si la condición es verdadera realizará el
ciclo, si es falsa la repetición cesará.
Símbolo del Para. Esta estructura de
control repetitiva se usa generalmente
cuando se conoce de antemano el numero
de iteraciones.
Símbolo Repita Hasta. funciona igual que
la estructura Mientras, con la diferencia que
al menos una vez hará el grupo de
instrucciones
y
luego
evaluará
una
condición. Si la condición evaluada es falsa
continua dentro del ciclo y si es verdadera
termina la iteración.
Líneas de flujo o dirección. Indican la
secuencia
en
que
se
realizan
operaciones.
Recomendaciones para el diseño de Diagramas de Flujo
•
Se deben usar solamente líneas de flujo horizontal y/o vertical.
•
Se debe evitar el cruce de líneas utilizando los conectores.
•
Se deben usar conectores sólo cuando sea necesario.
•
No deben quedar líneas de flujo sin conectar.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
9
las
Instituto de Educación Superior
“San Ignacio de Monterrico”
•
Se deben trazar los símbolos de manera que se puedan leer de arriba hacia abajo
y de izquierda a derecha.
•
Todo texto escrito dentro de un símbolo deberá ser escrito claramente, evitando el
uso de muchas palabras.
2.4.2 No Gráficos
Representa en forma descriptiva las operaciones que debe realizar un algoritmo
(pseudocodigo).
Pseudocódigo
Un pseudocódigo (falso lenguaje), es una serie de normas léxicas y gramaticales
parecidas a la mayoría de los lenguajes de programación, pero sin llegar a la rigidez de
sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa
con mayor agilidad que en cualquier lenguaje de programación, con la misma validez
semántica, normalmente se utiliza en las fases de análisis o diseño de Software, o en el
estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniería de
software.
No hay ningún compilador o intérprete de pseudocódigo informático (en el caso de que lo
hubiera serían los lectores de dicho pseudocódigo informático, por ej. una idea de un jefe
de programación a su personal), y por tanto no puede ser ejecutado en un ordenador,
pero las similitudes con la mayoría de los lenguajes informáticos lo hacen fácilmente
convertible.
El pseudocódigo describe un algoritmo utilizando una mezcla de frases en lenguaje
común, instrucciones de programación y palabras clave que definen las estructuras
básicas. Su objetivo es permitir que el programador se centre en los aspectos lógicos de
la solución a un problema.
No siendo el pseudocódigo un lenguaje formal, varían de un programador a otro, es decir,
no hay una estructura semántica ni arquitectura estándar. Es una herramienta ágil para el
estudio y diseño de aplicaciones, veamos un ejemplo, que podríamos definir como:
lenguaje imperativo, de tercera generación, según el método de programación
estructurada.
Pseudocódigo = Pseudo (Supuesto) + Código (Instrucción).
Formando Emprendedores De Calidad Para Un Mundo Empresarial
10
Instituto de Educación Superior
“San Ignacio de Monterrico”
ejemplo
INICIO
Edad: Entero
ESCRIBA “cual es tu edad?”
Lea Edad
SI Edad >=18 entonces
ESCRIBA “Eres mayor de Edad”
FINSI
ESCRIBA “fin del algoritmo”
FIN
Formando Emprendedores De Calidad Para Un Mundo Empresarial
11
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 3
LA COMPLEJIDAD DEL SOFTWARE
FACTORES DE CALIDAD
Formando Emprendedores De Calidad Para Un Mundo Empresarial
12
Instituto de Educación Superior
“San Ignacio de Monterrico”
El software Existen diferentes aplicaciones de software Sistemas, gestión, de ingeniería y
científico, empotrado, computadoras personales, basado en Web, de Inteligencia Artificial
(Pressman). El software es un producto Genérico. Organización que desarrolla software
lo vende al mercado abierto.
Personalizado. Sistemas requerimos por un cliente en
particular (Sommerville).
3.1 QUÉ ES EL SOFTWARE
Programas, documentos asociados y la configuración de datos que se necesitan para
hacer que estos programas operen de manera correcta en la computadora (Sommerville).
Los Programas que se ejecutan dentro de una computadora de cualquier tamaño y
arquitectura, documentos que comprenden formularios virtuales e impresos y datos que
combinan números y texto. También incluye representaciones de información de audio,
video e imágenes (Pressman).
3.2 FACTORES QUE IMPACTAN LA CREACIÓN DE SOFTWARE
El desarrollo de un producto depende de los siguientes elementos:
•
Número de personas involucradas en el desarrollo
•
Tamaño (líneas de código)
•
Tiempo dedicado a la elaboración del producto
Formando Emprendedores De Calidad Para Un Mundo Empresarial
13
Instituto de Educación Superior
“San Ignacio de Monterrico”
•
Recursos para la construcción del software
Conforme un producto/sistema de software requiera más de algunos de los elementos, el
producto será más complejo.
3.3 COMPLEJIDAD DEL SOFTWARE
El término Complejidad significa: Complicado, difícil, conjunto de varias cosas.
En términos del software:
•
Indica la cantidad de elementos de un sistema (complejidad cuantitativa).
•
Indica las interacciones potenciales (conectividad) y el número de estados
posibles que se producen a través de éstos (variedad, variabilidad).
El término Variedad significa: número de elementos discretos en un sistema.
El término Variabilidad, Índice máximo de relaciones posibles (hipotéticamente n!).
El término Sistema significa Conjunto de elementos interrelacionados entre sí y que
tienen un objetivo común.
3.4 SISTEMAS DE SOFTWARE - SIMPLES CARACTERÍSTICAS
•
Propósito muy limitado.
•
Ciclo de vida corto (definición, desarrollo, mantenimiento).
•
Se reemplazan cuando necesitan mantenimiento:
No correcciones
No reutilización
No extensión de funcionalidad.
En general, construido por una persona
3.5 SISTEMAS DE SOFTWARE COMPLEJOS - CARACTERÍSTICAS
•
Exhiben un conjunto muy rico de comportamientos.
•
Ciclo de vida largo.
•
Muchos usuarios dependen de él.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
14
Instituto de Educación Superior
“San Ignacio de Monterrico”
•
Construidos por un grupo de personas.
•
Resulta difícil (o imposible) para un individuo comprender TODAS las sutilezas del
sistema.
Por tanto, la complejidad es una propiedad esencial de todos los sistemas de software de
gran tamaño. Se puede dominar, pero NO eliminar
Formando Emprendedores De Calidad Para Un Mundo Empresarial
15
Instituto de Educación Superior
“San Ignacio de Monterrico”
3.6 ¿POR QUÉ EL SOFTWARE ES COMPLEJO?
La complejidad se deriva de cuatro elementos (Booch):
•
Complejidad del dominio del problema.
•
Dificultad para gestionar el proceso de desarrollo.
•
Flexibilidad que se puede alcanzar a través del software.
•
Problemas en la caracterización del comportamiento en sistemas discretos
Formando Emprendedores De Calidad Para Un Mundo Empresarial
16
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 4
EVOLUCIÓN DE LOS LENGUAJES DE PROGRAMACIÓN
Formando Emprendedores De Calidad Para Un Mundo Empresarial
17
Instituto de Educación Superior
“San Ignacio de Monterrico”
Un lenguaje de programación es un lenguaje inventado para controlar una máquina,
(normalmente, un ordenador). Hay muchísimos, de toda clase de tipos y características,
inventados para facilitar el abordaje de distintos problemas, el mantenimiento del
software, su reutilización, mejorar la productividad, etc.
Los lenguajes de programación se pueden clasificar según varios criterios. He procurado
reunir todos los que me parecen relevantes, diez en total.
Hay que tener en cuenta también, que en la práctica, la mayoría de lenguajes no pueden
ser puramente clasificados en una categoría, pues surgen incorporando ideas de otros
lenguajes y de otras filosofías de programación, pero no importa al establecer las
clasificaciones, pues el auténtico objetivo de las mismas es mostrar los rangos, las
posibilidades y tipos de lenguajes que hay.
4.1 NIVEL DE ABSTRACCIÓN
Según el nivel de abstracción, o sea, según el grado de cercanía a la máquina:
• Lenguajes de bajo nivel: La programación se realiza teniendo muy en cuenta las
características del procesador. Ejemplo: Lenguajes ensamblador.
• Lenguajes de nivel medio: Permiten un mayor grado de abstracción pero al mismo
tiempo mantienen algunas cualidades de los lenguajes de bajo nivel. Ejemplo: C puede
realizar operaciones lógicas y de desplazamiento con bits, tratar todos los tipos de datos
como lo que son en realidad a bajo nivel (números), etc.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
18
Instituto de Educación Superior
“San Ignacio de Monterrico”
• Lenguajes de alto nivel: Más parecidos al lenguaje humano. Manejan conceptos, tipos
de datos, etc., de una manera cercana al pensamiento humano ignorando
(abstrayéndose) del funcionamiento de la máquina. Ejemplos: Java, Ruby.
Hay quien sólo considera lenguajes de bajo nivel y de alto nivel, (en ese caso, C es
considerado de alto nivel).
4.2 PROPÓSITO
Según el propósito, es decir, el tipo de problemas a tratar con ellos:
• Lenguajes de propósito general: Aptos para todo tipo de tareas: Ejemplo: C.
• Lenguajes de propósito específico: Hechos para un objetivo muy concreto. Ejemplo:
Csound (para crear ficheros de audio).
•Lenguajes de programación de sistemas: Diseñados para realizar sistemas
operativos o drivers. Ejemplo: C.
• Lenguajes de script: Para realizar tareas varias de control y auxiliares. Antiguamente
eran los llamados lenguajes de procesamiento por lotes (batch) o JCL (”Job Control
Languages”). Se subdividen en varias clases (de shell, de GUI, de programación web,
etc.). Ejemplos: bash (shell), mIRC script, JavaScript (programación web).
4.3 EVOLUCIÓN HISTÓRICA
Con el paso del tiempo, se va incrementando el nivel de abstracción, pero en la práctica,
los de una generación no terminan de sustituir a los de la anterior:
• Lenguajes de primera generación (1GL): Código máquina.
• Lenguajes de segunda generación (2GL): Lenguajes ensamblador.
• Lenguajes de tercera generación (3GL): La mayoría de los lenguajes modernos,
diseñados para facilitar la programación a los humanos. Ejemplos: C, Java.
• Lenguajes de cuarta generación (4GL): Diseñados con un propósito concreto, o sea,
para abordar un tipo concreto de problemas. Ejemplos: NATURAL, Mathematica.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
19
Instituto de Educación Superior
“San Ignacio de Monterrico”
• Lenguajes de quinta generación (5GL): La intención es que el programador
establezca el qué problema ha de ser resuelto y las condiciones a reunir, y la máquina lo
resuelve. Se usan en inteligencia artificial. Ejemplo: Prolog.
4.4 MANERA DE EJECUTARSE
Según la manera de ejecutarse:
• Lenguajes compilados: Un programa traductor traduce el código del programa (código
fuente) en código máquina (código objeto). Otro programa, el enlazador, unirá los ficheros
de código objeto del programa principal con los de las librerías para producir el programa
ejecutable. Ejemplo: C.
• Lenguajes interpretados: Un programa (intérprete), ejecuta las instrucciones del
programa de manera directa. Ejemplo: Lisp.
También los hay mixtos, como Java, que primero pasan por una fase de compilación en
la que el código fuente se transforma en “bytecode”, y este “bytecode” puede ser
ejecutado luego (interpretado) en ordenadores con distintas arquitecturas (procesadores)
que tengan todos instalados la misma “máquina virtual” Java.
4.5 MANERA DE ABORDAR LA TAREA A REALIZAR
Según la manera de abordar la tarea a realizar, pueden ser:
• Lenguajes imperativos: Indican cómo hay que hacer la tarea, es decir, expresan los
pasos a realizar. Ejemplo: C.
• Lenguajes declarativos: Indican qué hay que hacer. Ejemplos: Lisp, Prolog. Otros
ejemplos de lenguajes declarativos, pero que no son lenguajes de programación, son
HTML (para describir páginas web) o SQL (para consultar bases de datos).
4.6 PARADIGMA DE PROGRAMACIÓN
El paradigma de programación es el estilo de programación empleado. Algunos lenguajes
soportan varios paradigmas, y otros sólo uno. Se puede decir que históricamente han ido
Formando Emprendedores De Calidad Para Un Mundo Empresarial
20
Instituto de Educación Superior
“San Ignacio de Monterrico”
apareciendo para facilitar la tarea de programar según el tipo de problema a abordar, o
para facilitar el mantenimiento del software, o por otra cuestión similar, por lo que todos
corresponden a lenguajes de alto nivel (o nivel medio), estando los lenguajes
ensambladores “atados” a la arquitectura de su procesador correspondiente. Los
principales son:
• Lenguajes de programación procedural: Divide el problema en partes más pequeñas,
que serán realizadas por subprogramas (subrutinas, funciones, procedimientos), que se
llaman unas a otras para ser ejecutadas. Ejemplos: C, Pascal.
• Lenguajes de programación orientada a objetos: Crean un sistema de clases y
objetos siguiendo el ejemplo del mundo real, en el que unos objetos realizan acciones y
se comunican con otros objetos. Ejemplos: C++, Java.
• Lenguajes de programación funcional: La tarea se realiza evaluando funciones,
(como en Matemáticas), de manera recursiva. Ejemplo: Lisp.
• Lenguajes de programación lógica: La tarea a realizar se expresa empleando lógica
formal matemática. Expresa qué computar. Ejemplo: Prolog.
Hay muchos paradigmas de programación: Programación genérica, programación
reflexiva, programación orientada a procesos, etc.
4.7 LUGAR DE EJECUCIÓN
En sistemas distribuidos, según dónde se ejecute:
• Lenguajes de servidor: Se ejecutan en el servidor. Ejemplo: PHP es el más utilizado
en servidores web.
• Lenguajes de cliente: Se ejecutan en el cliente. Ejemplo: JavaScript en navegadores
web.
4.8 ADMISIÓN O NO DE CONCURRENCIA
Según admitan o no concurrencia de procesos, esto es, la ejecución simultánea de varios
procesos lanzados por el programa:
Formando Emprendedores De Calidad Para Un Mundo Empresarial
21
Instituto de Educación Superior
“San Ignacio de Monterrico”
• Lenguajes concurrentes: Ejemplo: Ada.
• Lenguajes no concurrentes: Ejemplo: C.
4.9 INTERACTIVIDAD
Según la interactividad del programa con el usuario u otros programas:
• Lenguajes orientados a sucesos: El flujo del programa es controlado por la
interacción con el usuario o por mensajes de otros programas/sistema operativo, como
editores de texto, interfaces gráficos de usuario (GUI) o kernels. Ejemplo: VisualBasic,
lenguajes de programación declarativos.
• Lenguajes no orientados a sucesos: El flujo del programa no depende de sucesos
exteriores, sino que se conoce de antemano, siendo los procesos batch el ejemplo más
claro (actualizaciones de bases de datos, colas de impresión de documentos, etc.).
Ejemplos: Lenguajes de programación imperativos.
4.10 REALIZACIÓN VISUAL
Según la realización visual o no del programa:
• Lenguajes de programación visual: El programa se realiza moviendo bloques de
construcción de programas (objetos visuales) en un interfaz adecuado para ello. No
confundir con entornos de programación visual, como Microsoft Visual Studio y sus
lenguajes de programación textuales (como Visual C#). Ejemplo: Mindscript.
• Lenguajes de programación textual: El código del programa se realiza escribiéndolo.
Ejemplos: C, Java, Lisp.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
22
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 5
TECNOLOGÍA ORIENTADA A OBJETOS (EL NUEVO
PARADIGMA)
Formando Emprendedores De Calidad Para Un Mundo Empresarial
23
Instituto de Educación Superior
“San Ignacio de Monterrico”
La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un
paradigma de programación que usa objetos y sus interacciones para diseñar
aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo
herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se popularizó a
principios de la década de 1990. Actualmente son muchos los lenguajes de programación
que soportan la orientación a objetos.
5.1 INTRODUCCIÓN
Los objetos son entidades que combinan estado, comportamiento e identidad:
El estado está compuesto de datos, serán uno o varios atributos a los que se habrán
asignado unos valores concretos (datos).
El comportamiento está definido por los procedimientos o métodos con que puede operar
dicho objeto, es decir, qué operaciones se pueden realizar con él.
La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras
palabras, es su identificador (concepto análogo al de identificador de una variable o una
constante).
La programación orientada a objetos expresa un programa como un conjunto de estos
objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas
y módulos más fáciles de escribir, mantener y reutilizar.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
24
Instituto de Educación Superior
“San Ignacio de Monterrico”
De esta forma, un objeto contiene toda la información que permite definirlo e identificarlo
frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una
misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los
objetos disponen de mecanismos de interacción llamados métodos que favorecen la
comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en
los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las
que no se separan ni deben separarse el estado y el comportamiento.
Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados
por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos
para poder tratar los atributos con los que cuenta. El programador debe pensar
indistintamente en ambos conceptos, sin separar ni darle mayor importancia a ninguno de
ellos, hacerlo podría producir el hábito erróneo de crear clases contenedoras de
información por un lado y clases con métodos que manejen a las primeras por el otro. De
esta manera se estaría realizando una programación estructurada camuflada en un
lenguaje de programación orientado a objetos.
Esto difiere de la programación estructurada tradicional, en la que los datos y los
procedimientos están separados y sin relación, ya que lo único que se busca es el
procesamiento de unos datos de entrada para obtener otros de salida. La programación
estructurada anima al programador a pensar sobre todo en términos de procedimientos o
funciones, y en segundo lugar en las estructuras de datos que esos procedimientos
manejan. En la programación estructurada sólo se escriben funciones que procesan
datos. Los programadores que emplean éste nuevo paradigma, en cambio, primero
definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos
por sí mismos.
5.2 ORIGEN
Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un
lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen
Nygaard del Centro de Cómputo Noruego en Oslo. Al parecer, en este centro, trabajaban
en simulaciones de naves, y fueron confundidos por la explosión combinatoria de cómo
las diversas cualidades de diversas naves podían afectar unas a las otras. La idea ocurrió
para agrupar los diversos tipos de naves en diversas clases de objetos, siendo
responsable cada clase de objetos de definir sus propios datos y comportamiento. Fueron
Formando Emprendedores De Calidad Para Un Mundo Empresarial
25
Instituto de Educación Superior
“San Ignacio de Monterrico”
refinados más tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (y cuya
primera versión fue escrita sobre Basic) pero diseñado para ser un sistema
completamente dinámico en el cual los objetos se podrían crear y modificar "en marcha"
en lugar de tener un sistema basado en programas estáticos.
La programación orientada a objetos tomó posición como el estilo de programación
dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++,
una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al
auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a
objetos está particularmente bien adaptada. En este caso, se habla también de
programación dirigida por eventos.
Las características de orientación a objetos fueron agregadas a muchos lenguajes
existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La
adición de estas características a los lenguajes que no fueron diseñados inicialmente
para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de
mantenimiento del código. Los lenguajes orientados a objetos "puros", por otra parte,
carecían de las características de las cuales muchos programadores habían venido a
depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos
lenguajes basados en métodos orientados a objetos, pero permitiendo algunas
características imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un
temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido
esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet, y a
la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en
su versión 5 se ha ido modificando y soporta una orientación completa a objetos,
cumpliendo todas las características propias de la orientación a objetos.
5.3 FUNDAMENTOS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS (POO)
En la vida real podemos observar que estamos rodeados de objetos, por ejemplo una
mesa, una silla, un bolígrafo, etc. y todos ellos podrían clasificarse (con mayor o menor
detalle) atendiendo a una definición. Además, sabemos que a pesar de existir muchos
tipos de mesas, todas ellas tienen unas características comunes. En definitiva, es posible
concluir que pueden hacerse dos distinciones:
•
Por una parte tenemos el concepto de lo que es una mesa.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
26
Instituto de Educación Superior
“San Ignacio de Monterrico”
•
Por otra parte tenemos mesas concretas.
Esta idea fue trasladada a la informática y surgieron los conceptos de clase y objeto.
Podemos decir que una clase es un concepto sobre una entidad abstracta que define
cómo serán todos los objetos que existan de ese tipo. Por tanto, un objeto es una
concreción mientras que una clase es una abstracción.
Si trasladamos la definición anterior a la jerga técnica informática, podemos decir que una
clase es un prototipo que define las propiedades y los métodos comunes a múltiples
objetos de un mismo tipo. Sería como una plantilla para la creación de objetos. Por su
parte, un objeto es un conjunto de propiedades y métodos capaces de manipular dichas
propiedades.
Objetos en el Mundo Real
5.3.1 PROGRAMACIÓN ORIENTADA A OBJETOS
Es un paradigma de programación que define los programas en términos de "clases de
objetos", La programación orientada a objetos (POO), expresa un programa como un
conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite
hacer los programas y módulos más fáciles de escribir, mantener y reutilizar.
La POO hace que los problemas sean más sencillos, al permitir dividir el problema. Está
división se hace en objetos, de forma que cada objeto funcione de forma totalmente
independiente. Un objeto es un elemento del programa que posee sus propios datos y su
Formando Emprendedores De Calidad Para Un Mundo Empresarial
27
Instituto de Educación Superior
“San Ignacio de Monterrico”
propio funcionamiento. Es decir un objeto está formado por datos (propiedades) y
funciones que es capaz de realizar el objeto (métodos).
Podemos decir que un lenguaje está orientado a objetos si soporta objetos como una
característica
fundamental
del
mismo.
Pero,
¿qué
significa
soportar
objetos?
Fundamentalmente consiste en que el lenguaje permita las siguientes características:
Encapsulación, Herencia, Polimorfismo.
5.3.2 ¿QUÉ SON LAS CLASES?
Las clases son las plantillas para hacer objetos. Una clase sirve para definir una serie de
objetos con propiedades (atributos), comportamientos (operaciones o métodos), y
semántica comunes. Hay que pensar en una clase como un molde. A través de las clases
se obtienen los objetos en sí. Es decir antes de poder utilizar un objeto se debe definir la
clase a la que pertenece, esa definición incluye:
a) Sus atributos.
Es decir, los datos miembros de esa clase. Los datos pueden ser públicos (accesibles
desde otra clase) o privados (sólo accesibles por código de su propia clase. También se
las llama campos.
b) Sus métodos.
Las funciones miembro de la clase. Son las acciones (u operaciones) que puede realizar
la clase.
c) Código de inicialización.
Para crear una clase normalmente hace falta realizar operaciones previas (es lo que se
conoce como el constructor de la clase).
d) Otras clases.
Dentro de una clase se pueden definir otras clases (clases internas, son consideradas
como asociaciones dentro de UML).
Formando Emprendedores De Calidad Para Un Mundo Empresarial
28
Instituto de Educación Superior
“San Ignacio de Monterrico”
Diversas Definiciones de Clases
5.3.3 ¿QUÉ SON LOS OBJETOS?
Se les llama instancias de clase. Son un elemento en sí de la clase, un objeto se
crea utilizando el llamado constructor de la clase. El constructor es el método que
permite iniciar el objeto.
Un objeto contiene en sí mismo la información y los métodos o funciones necesarios para
manipular esa información. Lo más importante de los objetos es que permiten tener un
control total sobre 'quién' o 'qué' puede acceder a sus miembros, es decir, los objetos
pueden tener miembros públicos a los que podrán acceder otros objetos o miembros
privados a los que sólo puede acceder él. Estos miembros pueden ser tanto variables
como funciones.
Notación de Clase y Objeto en UML
5.4 PROPIEDADES DE LA POO
Formando Emprendedores De Calidad Para Un Mundo Empresarial
29
Instituto de Educación Superior
“San Ignacio de Monterrico”
5.4.1 ENCAPSULAMIENTO
Un objeto es un conjunto de propiedades y métodos, es decir, datos y programas
relacionados entre sí como si estuvieran encerrados en una cápsula. Son inaccesibles e
impiden conocer cómo está distribuida la información dentro de ellos. Esto implica que las
peticiones de información a un objeto deben hacerse mediante mensajes dirigidos a él.
Un mensaje es una simple llamada a un método del objeto con el que se quiere
comunicar.
El hecho de ser una cápsula, algo cerrado e inaccesible, favorecerá la depuración de
aplicaciones y la reutilización del código en caso de migrarlo a otros entornos también
permite reducir el potencial de errores que pudieran ocurrir. Hagamos una comparación
con lo que sería la vida real. Cuando montamos en un coche nos limitados a dar a la llave
contacto y el motor arranca. Es muy simple, pero esa simpleza nos la brinda la
encapsulación. La realidad es que ocurren muchas cosas: contacto eléctrico,
funcionamiento del motor de arranque, apertura del paso de combustible, etc. Pero,
¿necesitamos saber realmente lo que ocurre para hacer uso de él? No, nos basta con
saber que para arrancarlo necesitamos introducir la llave en el contacto y girarla.
La esencia del encapsulamiento es que cuando un objeto trae consigo su
funcionalidad esta ultima se oculta, por ejemplo: por lo general la mayoría de gente
que ve televisión no sabe, o no se preocupa de la complejidad electrónica que hay de
detrás de la pantalla ni de todas las operaciones que tienen que ocurrir para mostrar una
imagen en la pantalla es decir la televisión hace lo que tiene que hacer sin mostrarnos el
proceso necesario para ello, y por suerte, la mayoría de los artefactos electrodomésticos
funcionan así.
Encapsulamiento
Formando Emprendedores De Calidad Para Un Mundo Empresarial
30
Instituto de Educación Superior
“San Ignacio de Monterrico”
5.4.2 HERENCIA
La herencia es una característica que permite la creación de clases a partir de otras. Esto
conlleva tanto la reutilización del código, como la especialización de las clases.
La reutilización del código viene dada porque podemos definir clases nuevas partiendo de
otras ya existentes. En este caso se heredan sus propiedades y métodos. La
especialización de las clases viene por añadidura ya que, al definir una clase partiendo
de otra, lo que estamos es creando una nueva clase más especializada.
Visto lo anterior podemos ya intuir que las clases pueden organizarse jerárquicamente.
Esta jerarquía viene determinada por el uso realizado de la herencia. Con esta
organización empezamos a tener términos como: clase padre, clase hija, superclase (o
clase raíz) y clase final. A continuación vamos a explicarlos:
• Clase padre o superclase: se dice que una clase es padre de otra cuando sirve
como punto de partida para crear a esta última.
• Clase hija o subclase: es aquella clase que hereda de otra, y es hija con
respecto a su clase padre o su superclase.
• Clase final: toda aquella clase que no puede tener hijas.
Herencia
En el grafico anterior se representa una jerarquía de clases de figuras geométricas. En la
cima de la jerarquía tenemos la clase “Figura”, y es la clase padre de las clases “Circulo”
y “Poligono”. La clase “Circulo” es una clase hija de la clase “Figura” y también es una
Formando Emprendedores De Calidad Para Un Mundo Empresarial
31
Instituto de Educación Superior
“San Ignacio de Monterrico”
clase final. La clase “Poligono” es clase hija de la clase “Figura” y clase padre de las
clases “Rectangulo” y “Triangulo”. El resto de relaciones que faltan serían similares a las
ya explicadas.
La herencia puede ser de dos tipos: simple y compuesta. La diferencia entre ambas es
que en el caso de herencia compuesta se permite heredar de más de una clase. En otras
palabras, se trata de que una clase hija pueda tener más de una clase padre.
5.4.3 POLIMORFISMO
Consiste en la posibilidad de tener métodos con el mismo nombre en distintas clases. Al
hablar de métodos en distintas clases nos estamos refiriendo a métodos distintos y por
tanto con comportamientos distintos a pesar de que tengan el mismo nombre.
El polimorfismo permite poder enviar un mismo mensaje (recordemos que un mensaje es
una invocación a un método) a objetos de clases diferentes. Estos objetos recibirán el
mismo mensaje pero responderán a él de formas diferentes. Por ejemplo, un mensaje “+”
para un objeto entero significaría una suma, mientras que para un objeto string (cadena
de caracteres) significaría la concatenación.
Polimorfismo
En él grafico podemos ver una jerarquía de clases en la que todas las clases que la
componen tienen un método llamado “dibujar()”. Todos tienen el mismo nombre pero
cada uno de ellos podrá tener una funcionalidad distinta. En este ejemplo concreto, una
posible interpretación podría ser que tenemos dos clases hijas que redefinen el método
“dibujar()” de su clase padre. Probablemente el método “dibujar()” de la clase padre sea
un método abstracto (no se ha implementado, sólo se ha definido) ya que para dibujar un
polígono es necesario saber el tipo de polígono del que se trata. Por tanto, las clases
Formando Emprendedores De Calidad Para Un Mundo Empresarial
32
Instituto de Educación Superior
“San Ignacio de Monterrico”
hijas de la clase “Poligono” se ven obligadas a implementar el método “dibujar()” que será
distinto en cada caso. Esto es un claro ejemplo de polimorfismo.
5.4.4 PRINCIPIO DE OCULTACIÓN
Consiste en que cada objeto está aislado del exterior, es un módulo natural, y cada tipo
de objeto expone una interfaz a otros objetos que específica cómo pueden interactuar
con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra
su modificación por quien no tenga derecho a acceder a ellas, solamente los propios
métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos
no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando
efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto,
permitiendo un acceso directo a los datos internos del objeto de una manera controlada y
limitando el grado de abstracción. La aplicación entera se reduce a un agregado o
rompecabezas de objetos.
En programación orientada a objetos el principio de ocultación hace referencia a que los
atributos privados de un objeto no pueden ser modificados ni obtenidos a no ser que se
haga a través de algún módulo (funciones, métodos y en algunos lenguajes también
llamados propiedades del objeto).
Un objeto oculta lo que hace a otros objetos y al mundo exterior, pero un objeto necesita
presentar un “rostro” al mundo exterior para poder inicializar sus operaciones en el
ejemplo de la televisión, Esta tiene que mostrar diversos botones en el control remoto y
en si misma que permiten realizar operaciones para ajustar los niveles de volumen, la
selección de canales, etc. Estos botones se conocen como interfaces.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
33
Instituto de Educación Superior
“San Ignacio de Monterrico”
Principio de Ocultación
5.4.5 ABSTRACCIÓN
Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede
realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el
sistema sin revelar cómo se implementan estas características. Los procesos, las
funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad
de técnicas son requeridas para ampliar una abstracción.
La abstracción se refiere a quitar las propiedades y acciones de un objeto para dejar solo
aquellas que sean necesarias, que quiere decir esto ultimo que diferentes tipos de
problemas requieren diferentes cantidades de información aun si estos problemas
pertenecen a un área en común.
Algunos términos importantes se derivan de los anteriores como:
Método:
algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se
desencadena tras la recepción de un "mensaje". Desde el punto de vista del
comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio
Formando Emprendedores De Calidad Para Un Mundo Empresarial
34
Instituto de Educación Superior
“San Ignacio de Monterrico”
en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para
otro objeto del sistema.
Evento:
un suceso en el sistema (tal como una interacción del usuario con la máquina, o un
mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje
adecuado al objeto pertinente. También se puede definir como evento, a la reacción que
puede desencadenar un objeto, es decir la acción que genera.
Mensaje:
una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos
con ciertos parámetros asociados al evento que lo generó.
Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase
de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus
características predeterminadas, y cuyo valor puede ser alterado por la ejecución de
algún método.
Estado interno:
es una variable que se declara privada, que puede ser únicamente accedida y alterada
por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para
el objeto (o clase de objetos). No es visible al programador que maneja una instancia de
la clase.
Componentes de un objeto: atributos, identidad, relaciones y métodos.
Representación de un objeto: un objeto se representa por medio de una tabla o entidad
que esté compuesta por sus atributos y funciones correspondientes.
En comparación con un lenguaje imperativo, una "variable", no es más que un
contenedor interno del atributo del objeto o de un estado interno, así como la "función" es
un procedimiento interno del método del objeto.
5.5 CARACTERÍSTICAS DE LA PROGRAMACIÓN ORIENTA A OBJETOS
a) Simple.
Ofrece la funcionalidad de un lenguaje potente pero sin las características menos usadas
y más confusas de éstos. El ejemplo más claro puede ser el recolector de basura, que
Formando Emprendedores De Calidad Para Un Mundo Empresarial
35
Instituto de Educación Superior
“San Ignacio de Monterrico”
evita que andemos preocupándonos de liberar memoria. Otro ejemplo podría ser la
supresión de los punteros.
b) Lenguaje de objetos.
¿Por qué "de" objetos y no "orientado a" objetos?
Por que, al contrario de otros
lenguajes como C++, no es un lenguaje modificado para poder trabajar con objetos sino
que es un lenguaje creado para trabajar con objetos desde cero. De hecho, TODO lo que
hay en Java son objetos. Java soporta las tres características básicas de la orientación a
objetos: encapsulación, herencia y polimorfismo.
c) Distribuido.
Proporciona las librerías y herramientas necesarias para que las aplicaciones puedan ser
distribuidas. Se ha desarrollado con extensas capacidades de interconexión a red y
soporta varios protocolos de red.
d) Robusto.
Realiza variadas comprobaciones tanto en tiempo de compilación como de ejecución.
Entre ellas podemos mencionar la comprobación de tipos y la comprobación de límites de
arrays.
e) Portable.
Esto no se refiere a la independencia de la plataforma, si no a la portabilidad en cuanto a
desarrollo. Por ejemplo, los enteros son siempre enteros de 32 bits en complemento a 2,
con independencia de la plataforma.
f) Multiplataforma.
Como mencionamos antes, no es necesario recompilar las aplicaciones Java para los
distintos sistemas en que van a ser explotadas.
g) Multihilo.
Permite múltiples hilos de ejecución, es decir, muchas actividades simultáneas dentro del
mismo programa. Las ventajas de esto son un mejor rendimiento interactivo (el usuario
no percibe tanto la ocupación de la máquina) y un mejor comportamiento en tiempo real
(aunque sea algo muy limitado por el sistema operativo).
h) Dinámico.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
36
Instituto de Educación Superior
“San Ignacio de Monterrico”
Cuando una aplicación se lanza, no se cargan todas las librerías que requiere, sino que la
carga es bajo demanda. Las librerías nuevas o actualizadas no paralizarán las
aplicaciones en funcionamiento.
5.6 LENGUAJES ORIENTADOS A OBJETOS
Entre los lenguajes orientados a objetos se destacan los siguientes:
•
ABAP
•
ActionScript
•
ActionScript 3
•
Ada
•
C++
•
C#
•
Clarion
•
Lenguaje de programación D
•
Object Pascal (Delphi)
•
Gambas
•
Harbour
•
Eiffel
•
Java
•
JavaScript (la herencia se realiza por medio de la programación basada en
prototipos)
•
Lexico (en castellano)
•
Objective-C
•
Ocaml
Formando Emprendedores De Calidad Para Un Mundo Empresarial
37
Instituto de Educación Superior
“San Ignacio de Monterrico”
•
Oz
•
PHP (en su versión 5)
•
Python
•
Ruby
•
Smalltalk
•
Magik (SmallWorld)
•
VB.NET
•
Visual FoxPro (en su versión 6)
•
Visual Basic
•
XBase++
•
Gambas
•
Flex builder (adobe)
Muchos de estos lenguajes de programación no son puramente orientados a objetos, sino
que son híbridos que combinan la POO con otros paradigmas.
Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object
REXX, han sido creados añadiendo extensiones orientadas a objetos a un lenguaje de
programación clásico.
Un nuevo paso en la abstracción de paradigmas de programación es la Programación
Orientada a Aspectos (POA). Aunque es todavía una metodología en estado de
maduración, cada vez atrae a más investigadores e incluso proyectos comerciales en
todo el mundo.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
38
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 6
LENGUAJE JAVA – SINTAXIS Y CONCEPTOS BÁSICOS
Formando Emprendedores De Calidad Para Un Mundo Empresarial
39
Instituto de Educación Superior
“San Ignacio de Monterrico”
6.1 IDENTIFICADORES
Los identificadores sirven para nombrar variables, propiedades, métodos, clases, objetos,
interfaces y cualquier otra entidad que sea necesario identificar para poder usar.
En Java, un nombre de identificador debe empezar con una letra, un símbolo de
subrayado (_) o un símbolo dólar ($). El resto de los caracteres empleados pueden ser
letras o números. No existe una longitud máxima y se distinguen las mayúsculas de las
minúsculas.
6.2 VARIABLES
Una variable es un nombre que contiene un valor que puede cambiar a lo largo del
programa es decir representan direcciones de memoria en las que podemos alojar
temporalmente la información que necesitemos, y por otro, nos ofrecen la facilidad de
referirnos a ellas mediante un nombre.
Una declaración de variable se compone de dos partes: su tipo y su nombre.
Adicionalmente puede indicarse un valor para su inicialización. El tipo de la variable
determina los valores que puede contener y las operaciones que se podrán realizar con
ella. Según el tipo de información que contienen pueden ser variables de tipos primitivos
o variables de referencia.
Desde el punto de vista del papel que desempeñan, las variables pueden ser:
•
Variable miembro de una clase: Se definen dentro de la clase y fuera de
cualquier método.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
40
Instituto de Educación Superior
“San Ignacio de Monterrico”
•
Variables locales: Se definen dentro de un método o, más en general, dentro de
cualquier bloque entre llaves ({ }). Se crean dentro del bloque y se destruyen al
finalizar dicho bloque.
Existe una serie de palabras reservadas las cuales tienen un significado especial para
Java y por lo tanto no se pueden utilizar como nombres de variables. Dichas palabras
son:
abstract
char
double
for
boolean
class
else
goto*
break
const*
extends
if
byte
continue
final
implements
case
default
finally
import
catch
do
float
instanceof
int
package
static
throws
interface
private
super
transient
long
protected
switch
try
native
public
synchronized
void
new
return
this
volatile
null
short
throw
while
(*) Son palabras reservadas, pero no se utilizan en la actual implementación del lenguaje
Java.
6.3 ÁMBITO DE VARIABLES
Se denomina visibilidad, ámbito o alcance de una variable, a la parte de una aplicación
en la que dicha variable es accesible. En otras palabras, la parte en la cual puede usarse
dicha variable. Como norma general, podemos decir que las variables declaradas
dentro de un bloque (entre llaves) son visibles y existen dentro de ese bloque. Por
ejemplo, las variables declaradas al principio de una función existen mientras se ejecute
la función, las declaradas dentro de un bloque “if” sólo serán accesibles y válidas dentro
de dicho bloque y las variables miembro de una clase son válidas mientras existe el
objeto.
Las variables miembro de una clase declarada como pública (public), serán accesibles
mediante una referencia a un objeto de dicha clase usando el operador punto. Por su
parte, las declaradas como privadas (private) no son accesibles desde otras clases. Las
funciones miembro de una clase tienen acceso directo a todas las variables miembro de
la clase sin necesidad de anteponer el nombre de un objeto de la clase. Sin embargo, las
funciones miembro de una clase “B” derivada de otra “A”, tienen acceso a todas las
variables miembro de “A” declaradas como públicas o protegidas (protected), pero no a
las declaradas como privadas. Una clase hija sólo puede acceder directamente a las
variables y función miembro de su clase padre declaradas como públicas o protegidas.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
41
Instituto de Educación Superior
“San Ignacio de Monterrico”
Otra característica del lenguaje Java consiste en que es posible declarar una variable
dentro de un bloque con el mismo nombre que una variable miembro, pero no con
el nombre de otra variable local que ya existiera. La variable declarada dentro del
bloque oculta a la variable miembro en ese bloque. Para acceder a la variable
miembro oculta sería necesario que usáramos el operador this.
Sintaxis:
[modificador] <nombreDeTipo> <nombreDeVariable> [= <inicializador>];
Adicionalmente a las declaraciones de Acceso, las variables pueden ser declaradas
como:
•
Static. Variable de clase. (Solo existe una copia por clase con acceso compartido
entre todas las instancias de la misma.). Este calificador indica que el objeto no
necesita de un objeto para poder utilizarlo sino que se le utiliza directamente a
través de la clase.
•
Final. Declara la variable como constante. Este calificador indica que el elemento
no podrá ser modificado por nada, solo podrá ser utilizada.
En caso de que sea una variable de tipo primitivo indica que el valor no podrá ser
cambiado. Para objetos, la referencia del mismo no podrá apuntar a un nuevo objeto,
pero el objeto aun es capaz de ser modificado.
MODIFICADORES (Niveles de Acceso)
•
Public. El campo es accesible de forma general sin restricciones. Es decir indica
que el elemento puede ser utilizado dentro de la clase, dentro de las clases
descendientes y desde cualquier objeto de la clase.
•
Protected. El campo es accesible desde cualquier subclase (tanto dentro como
fuera del paquete) y a todo método dentro del paquete. Es decir indica que el
elemento puede ser utilizado dentro de la clase, dentro de las clases
descendientes, mas no desde un objeto de la clase.
•
Default (Package o tambien denominado Friendly). El campo es accesible a
todos los métodos dentro del paquete. Es el acceso por defecto.
•
Private. El campo es restringido a la clase que lo declara.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
42
Instituto de Educación Superior
“San Ignacio de Monterrico”
6.4 TIPOS DE DATOS PRIMITIVOS
Declarar un variable de tipo primitiva reserva de por si el espacio de memoria necesario.
•
Byte
Entero muy pequeño.
•
Short
Entero Corto.
•
Int
Entero normal.
•
Long
Entero largo.
•
Char
Carácter.
•
Float
Número real de precisión simple.
•
Double
Número real de doble precisión.
•
Boolean
Valor lógico.
•
Void
Tipo Vació.
De no asignarse un valor de inicio, el compilador por defecto asignará uno.
Tipos
Precisión
Valor Por Defecto
Byte
8 bits
0
Short
16 bits
0
Int
32 bits
0
Long
64 bits
0
Char
16 bits
\u0000
Float
32 bits
+0.0f
Double
64 bits
+0.0d
Boolean
-
false
6.5 ORGANIZACIÓN
•
Paquetes (Packages): son un grupo o librería de clases desarrolladas en java que se
utilizan para algo específico.
Las principales clases de java son las siguientes (incluidas en el JDK):
o
java.applet: Creado para soportar la creación de applet Java, el paquete
java.applet permite a las aplicaciones ser descargadas sobre una red y
ejecutarse dentro de una sandbox..
Formando Emprendedores De Calidad Para Un Mundo Empresarial
43
Instituto de Educación Superior
“San Ignacio de Monterrico”
o
java.awt: La Abstract Window Toolkit contiene rutinas para soportar
operaciones básicas GUI y utiliza ventanas básicas desde el sistema nativo
subyacente.
o
java.awt.event: Soporte y procesamiento de eventos para controles awt.
o
java.io: El paquete java.io contiene clases que soportan entrada/salida. Las
clases del paquete son principalmente streams; sin embargo, se incluye una
clase para ficheros de acceso aleatorio.
o
java.lang: El paquete Java java.lang contiene clases fundamentales e
interfaces fuertemente relacionadas con el lenguaje y el sistema runtime. Esto
incluye las clases raíz que forman la jerarquía de clases, tipos relacionados
con la definición del lenguaje, excepciones básicas, funciones matemáticas,
Hilos, funciones de seguridad, así como también alguna información sobre el
sistema nativo subyacente.
o
java.net: El paquete java.net suminista rutinas especiales IO para redes,
permitiendo las peticiones HTTP, así como también otras transacciones
comunes.
o
java.util: Las estructuras de datos que agregan objetos son el foco del
paquete java.util. En el paquete está incluida la API Collections, una jerarquía
organizada
de
estructura
de
datos
influenciada
fuertemente
por
consideraciones de patrones de diseño.
o
javax.swing: Swing es una colección de rutinas que se construyen sobre
java.awt para suministrar un toolkit de widgets independiente de plataforma.
o
javax.swing.event: Soporte y procesamiento de eventos para controles
swing.
o
java.math: El paquete java.math soporta aritmética multiprecision (incluyendo
operaciones aritméticas modulares) y suministra generadores de números
primos multiprecision usados para la generación de claves criptográficas.
6.5.1 Instrucción Import
Hay código que se puede utilizar en los programas que realicemos en Java. Se importan
clases de objetos que están contenidas, a su vez, en paquetes estándares.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
44
Instituto de Educación Superior
“San Ignacio de Monterrico”
Por ejemplo la clase Date es una de las más utilizadas, sirve para manipular fechas. Si
alguien quisiera utilizar en su código objetos de esta clase, necesita incluir una
instrucción que permita utilizar esta clase. La sintaxis de esta instrucción es:
import paquete.subpaquete.subsubapquete....clase
Esta instrucción se coloca arriba del todo en el código. Para la clase Date sería:
import java.util.Date
Lo que significa, importar en el código la clase Date que se encuentra dentro del
paquete útil que, a su vez, está dentro del gran paquete llamado java.
También se puede utilizar el asterisco en esta forma:
import java.util.*
Esto significa que se va a incluir en el código todas las clases que están dentro del
paquete util de java.
6.5.2 Comentarios
En java al igual que en otros lenguajes existen los comentarios que son:
//Comentario de una línea.
/* …*/
Comentario de Varias líneas.
/**
Comentario de Documentación
* Esta aplicación realiza lo siguiente: …
* @autor Nilton Alexis Gómez Flores
* @version 1.0
Ejemplo
// J003.java = dibuja 2 circunferencias
import java.awt.*;
import java.awt.event.*;
class J003 extends Frame {
public J003() {
setTitle("Dos circunferencias");
}
Formando Emprendedores De Calidad Para Un Mundo Empresarial
45
Instituto de Educación Superior
“San Ignacio de Monterrico”
public static void main(String [] args) {
Frame f=new J003();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(300,200);
f.setVisible(true);
}
public void paint(Graphics g){
g.setColor(Color.red);
g.drawOval(10,30,30,30);
g.setColor(Color.blue);
g.drawOval(35,30,30,30);
g.drawString("Dos circunferencias",40,100);
}
}
f.setSize(600,400) Determina el tamaño de la ventana: 1ª coordenada = 600 =
anchura en píxels, 2ª coordenada = 400 = altura en píxels.
g.setColor(Color,red) Establece el rojo como color de dibujo.
g.drawOval(10,30,30,30) Dibuja una circunferencia cuyo “vértice” superior
izquierdo se encuentra en el punto 10,30. La tercera coordenada es el diametro
horizontal y la cuarta el diámetro vertical. Como los dos diámetros son iguales,
resulta una circunferencia. Si fueran distintos, seria una elipse.
g.drawString(“Dos circunferencias”,40,100) “Dibuja” el texto que hay entre
comillas en el punto de coordenadas 40,100 (1ª coordenada= distáncia horizontal
Formando Emprendedores De Calidad Para Un Mundo Empresarial
46
Instituto de Educación Superior
“San Ignacio de Monterrico”
desde el borde izquierdo, 2ª coordenada = distáncia vertical desde el borde
superior).
6.6 CONVERSIÓN ENTRE TIPOS (CASTING)
Hay veces en las que se deseará realizar algo como:
int a;byte b=12;
a=b;
La duda está en si esto se puede realizar. La respuesta es que sí. Sí porque un dato
byte es más pequeño que uno int y Java le convertirá de forma implícita. Sin embargo en:
int a=1;byte b;
b=a;
El compilador devolverá error aunque el número 1 sea válido para un dato byte. Para ello
hay que hacer un casting. Eso significa poner el tipo deseado entre paréntesis delante de
la expresión.
int a=1;byte b;
b= (byte) a; //No da error
En el siguiente ejemplo:
byte n1=100, n2=100, n3;
n3= n1 * n2 /100;
Aunque el resultado es 100, y ese resultado es válido para un tipo byte; lo que ocurrirá en
realidad es que ocurrirá un error. Eso es debido a que primero multiplica 100 * 100 y
como eso da 10000, no tiene más remedio el compilador que pasarlo a entero y así
quedará aunque se vuelva a dividir. La solución correcta sería:
n3 = (byte) (n1 * n2 / 100);
Más ejemplos de CASTING
int a = 24;
byte b = (byte) a;
short c = (short) a;
long d = (long) a;
6.7 OPERADORES
6.7.1 Operadores Aritméticos
Formando Emprendedores De Calidad Para Un Mundo Empresarial
47
Instituto de Educación Superior
“San Ignacio de Monterrico”
Hay que tener en cuenta que el resultado de estos operadores varía notablemente si
usamos enteros o si usamos números de coma flotante.
Por ejemplo:
double resultado1, d1=14, d2=5;
int resultado2, i1=14, i2=5;
resultado1= d1 / d2;
resultado2= i1 / i2;
resultado1 valdrá 2.8 mientras que resultado2 valdrá 2. Es más incluso:
double resultado;
int i1=7,i2=2;
resultado=i1/i2; //Resultado valdrá 3
resultado=(double)i1/(double)i2; //Resultado valdrá 3.5
El operador del módulo (%) para calcular el resto de una división entera. Ejemplo:
int resultado, i1=14, i2=5;
resultado = i1 % i2; //El resultado será 4
6.7.2 Operadores Relacionales
Sirven para comparar valores. Siempre devuelven valores booleanos. Son:
6.7.3 Operadores Lógicos
Formando Emprendedores De Calidad Para Un Mundo Empresarial
48
Instituto de Educación Superior
“San Ignacio de Monterrico”
También devuelven valores booleanos.
Los operadores lógicos (AND, OR y NOT), sirven para evaluar condiciones complejas.
NOT sirve para negar una condición. Ejemplo:
boolean mayorDeEdad, menorDeEdad;
int edad = 21;
mayorDeEdad = edad >= 18; //mayorDeEdad será true
menorDeEdad = !mayorDeEdad; //menorDeEdad será false
El operador && (AND) sirve para evaluar dos expresiones de modo que si ambas son
ciertas, el resultado será true sino el resultado será false. Ejemplo:
boolean carnetConducir=true;
int edad=20;
boolean puedeConducir= (edad>=18) && carnetConducir;
//Si la edad es de al menos 18 años y carnetConducir es
//true, puedeConducir es true
El operador || (OR) sirve también para evaluar dos expresiones. El resultado será trae si
al menos uno de las expresiones es true. Ejemplo:
boolean nieva =true, llueve=false, graniza=false;
boolean malTiempo= nieva || llueve || graniza;
6.7.4 Operadores De Bit
Manipulan los bits de los números. Son:
Formando Emprendedores De Calidad Para Un Mundo Empresarial
49
Instituto de Educación Superior
“San Ignacio de Monterrico”
6.7.5 Operadores De Asignación
Permiten asignar valores a una variable. El fundamental es “=”. Pero sin embargo se
pueden usar expresiones más complejas como:
x += 3;
En el ejemplo anterior lo que se hace es sumar 3 a la x (es lo mismo x+=3, que x=x+3).
Eso se puede hacer también con todos estos operadores:
También se pueden concatenar asignaciones:
x1 = x2 = x3 = 5;
Otros operadores de asignación son “++” (incremento) y “- -“ (decremento). Ejemplo:
x++; //esto es x=x+1;
x--; //esto es x=x-1;
Pero hay dos formas de utilizar el incremento y el decremento. Se puede usar por
ejemplo x++ o ++x. La diferencia estriba en el modo en el que se comporta la asignación.
Ejemplo:
int x=5, y=5, z;
z=x++; //z vale 5, x vale 6
z=++y; //z vale 6, y vale 6
Formando Emprendedores De Calidad Para Un Mundo Empresarial
50
Instituto de Educación Superior
“San Ignacio de Monterrico”
6.7.6 Operador ?
Este operador (conocido como if de una línea) permite ejecutar una instrucción u otra
según el valor de la expresión. Sintaxis:
expresionlogica?valorSiVerdadero:valorSiFalso;
Ejemplo:
paga=(edad>18)?6000:3000;
En este caso si la variable edad es mayor de 18, la paga será de 6000, sino será de
3000.
Se evalúa una condición y según es cierta o no se devuelve un valor u otro. Nótese que
esta función ha de devolver un valor y no una expresión correcta. Es decir, no
funcionaría:
(edad>18)? paga=6000: paga=3000; /ERROR!!!!
6.7.7 Operador Entero De Concatenación De Cadenas
Cuando una cadena de texto y una expresión que no sea de tipo cadena se combinan
usando el operador de concatenación de cadenas (+), el resultado es una nueva cadena.
Dependiendo de la expresión y de su contenido, podremos obtener los siguientes
resultados:
• Si la expresión es un tipo de referencia con valor null, se obtendrá una nueva
cadena igual a la cadena original más la cadena “null”.
• Si la expresión es un tipo de referencia con valor distinto de null, se obtendrá una
cadena igual a la original más el valor devuelto por el método toString() del tipo de
referencia.
• Si la expresión es un tipo primitivo, se obtendrá una cadena igual a la original más
el valor del tipo primitivo representado como cadena.
Veamos unos ejemplos sobre las posibles concatenaciones expuestas:
String inicial = “ABC”;
String nulo = null;
String nonulo = “def”;
Formando Emprendedores De Calidad Para Un Mundo Empresarial
51
Instituto de Educación Superior
“San Ignacio de Monterrico”
byte numero = 23;
String caso1 = inicial + nulo; // Se asigna a la variable el valor “ABCnull”
String caso2 = inicial + nonulo; // Se asigna a la variable el valor “ABCdef”
String caso3 = inicial + numero; // Se asigna a la variable el valor “ABC23”
6.7.8 Operadores De Referencias
Se trata de operadores que operan sobre valores de tipo de referencia, esto es, sobre
referencias a objetos, interfaces y arrays. Existen distintas categorías y vamos a verlas
detalladamente a continuación.
6.7.9 Operadores De Referencias Para Acceso A Campos
El acceso a los campos se realiza mediante el operador punto (.), por ello esta notación
también recibe el nombre de notación de punto. En este tipo de expresiones, el
elemento que está a la izquierda del punto identifica a la clase, objeto o interfaz a la que
pertenece el elemento que está a la derecha del punto. Por ejemplo, para referirnos a la
constante “MAX_VALUE” de la clase “Float” lo haríamos con la siguiente expresión:
“Float.MAX_VALUE”.
Existen dos calificadores especiales que se pueden utilizar para acceder a los campos
desde el interior de un objeto. Estos calificadores son las palabras this y super. La
primera hace referencia al objeto al que está asociado el método. La segunda se utiliza
para hacer referencia a los campos de la clase padre.
6.7.10 Operadores De Referencias Para Invocación De Métodos
La invocación de métodos, al igual que para el acceso a campos, se realiza mediante el
operador punto.
También pueden usarse los calificadores this y super. Ambos ofrecen la misma
funcionalidad que tienen los correspondientes para el acceso a campos.
6.7.11 Operadores De Conversión De Tipos De Referencia
Formando Emprendedores De Calidad Para Un Mundo Empresarial
52
Instituto de Educación Superior
“San Ignacio de Monterrico”
Las operaciones de conversión de tipos se utilizan para convertir una referencia de objeto
a un cierto tipo.
Pero existen ciertos requisitos para permitir la conversión. El tipo de un objeto sólo puede
convertirse al de su propia clase, al de una de sus superclases, al de una interfaz que sea
implementada por su propia clase o al de una interfaz que sea implementada por alguna
de sus superclases.
Los tipos de referencia se convierten usando como operador el nombre entre paréntesis
de la clase a la cual se quiere convertir y anteponiéndolo a la expresión a convertir. En el
siguiente ejemplo se supone la existencia de dos clases: “FiguraGeometrica” y
“Rectangulo”, donde la segunda es descendiente de la primera.
FiguraGeometrica figura = new Rectangulo ();
Rectangulo rectangulo = (Rectangulo) figura;
6.7.12 Operador De Tipo De Referencia
En Java es sumamente importante la clase a la que pertenece un tipo de referencia.
Puesto que se permite la conversión entre tipos, se hace necesario que podamos
comprobar desde el código si una determinada conversión puede realizarse.
Para determinar si un objeto es una instancia de una clase concreta, disponemos del
operador instanceof que devuelve un valor booleano o genera una excepción. El primer
operando debe ser un tipo de referencia y el segundo debe ser un nombre de clase.
Vamos a ver en la siguiente relación los posibles casos:
•
Si el primer operando es null (significaría que no apunta a ningún objeto
instanciado), el resultado es false.
•
Si el primer operando es distinto de null y es posible convertirlo a la clase que
especifica el segundo operando, el resultado será true.
•
Si el primer operando es distinto de null y no es un descendiente del tipo
especificado por el segundo operando, la instrucción es ilegal y causaría un error
de ejecución.
En el siguiente ejemplo se resumen los comportamientos que se acaban de describir:
String s1 = “texto”;
String s2 = null;
boolean b1 = s1 instanceof String; // “b1” toma el valor true
Formando Emprendedores De Calidad Para Un Mundo Empresarial
53
Instituto de Educación Superior
“San Ignacio de Monterrico”
boolean b2 = s2 instanceof String; // “b2” toma el valor false
6.8 PRECEDENCIA
A veces hay expresiones con operadores que resultan confusas. Por ejemplo en:
resultado = 8 + 4 / 2;
Es difícil saber el resultado. ¿Cuál es? ¿Seis o diez? La respuesta es 10 y la razón es
que el operador de división siempre precede en el orden de ejecución al de la suma. Es
decir, siempre se ejecuta antes la división que la suma. Siempre se pueden usar
paréntesis para forzar el orden deseado:
resultado = (8 + 4) / 2;
Ahora no hay duda, el resultado es seis. No obstante el orden de precedencia de los
operadores Java es:
En la tabla anterior los operadores con mayor precedencia está en la parte superior, los
de menor precedencia en la parte inferior. De izquierda a derecha la precedencia es la
misma. Es decir, tiene la misma precedencia el operador de suma que el de resta.
Esto último provoca conflictos, por ejemplo en:
resultado = 9 / 3 * 3;
El resultado podría ser uno ó nueve. En este caso el resultado es nueve, porque la
división y el producto tienen la misma precedencia; por ello el compilador de Java realiza
primero la operación que este más a la izquierda, que en este caso es la división. Una
vez más los paréntesis podrían evitar estos conflictos.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
54
Instituto de Educación Superior
“San Ignacio de Monterrico”
6.9 CONSTANTES
6.9.1 Constantes Literales
Por su parte, las constantes literales son representaciones literales de datos en el
código fuente. Estos valores se emplean para inicializar variables o para usarlas en
expresiones en las que se requieren valores constantes.
Las constantes literales pueden usarse para referirse explícitamente a uno de los tipos
siguientes: int, long, float, double, boolean, char, String y null. En caso de que
necesitáramos representar un tipo primitivo distinto de los indicados, podríamos hacer
una conversión explícita al tipo deseado. Por otra parte, los objetos no pueden ser
representados mediante estas constantes, y por tanto, no existen constantes literales de
tipo de referencia.
6.9.2 Constantes Enteras
Las constantes enteras se representan por un valor que está formado sólo por dígitos
numéricos y no tienen la coma decimal. Si el número no comienza por cero, representa
un número decimal (en base 10).
Para representar constantes de tipo “long” se emplea el mismo método pero añadiendo al
final la letra “L”.
Está permitido el empleo de la letra “L” en minúsculas, pero no debe usarse ya que puede
confundirse con el número uno.
Además de representaciones en formato decimal, se pueden representar constantes en
los formatos octal y hexadecimal. Las constantes octales se representan anteponiendo un
cero al propio número, que además, sólo podrá estar formado por los dígitos del 0 al 7.
Por su parte, las constantes hexadecimales se representan anteponiendo 0x o 0X y
permitiendo que los dígitos del número puedan ser del 0 al 9 y las letras de la A a la F (en
mayúsculas o minúsculas). Las constantes octales y hexadecimales son de tipo entero a
menos que estén seguidas por la letra “L”, en cuyo caso serían de tipo long.
int a = 1002; // Tipo int
long b = 1002L; // Tipo long
int c = 053; // Tipo int en octal
Formando Emprendedores De Calidad Para Un Mundo Empresarial
55
Instituto de Educación Superior
“San Ignacio de Monterrico”
int d = 053L; // Tipo long en octal
int e = 0X002B ; // Tipo int en hexadecimal
int f = 0X002BL; // Tipo long en hexadecimal
El tipo char es un tipo entero, no obstante se trata de un tipo especial pensado para
almacenar caracteres Unicode. Estos últimos son similares a los caracteres ASCII en que
están pensados para almacenar símbolos, números y caracteres. Sin embargo, el rango
del tipo char es mucho mayor porque permite representar caracteres de casi todos los
idiomas del mundo.
Las constantes literales de tipo char pueden representarse de dos formas distintas:
•
Encerrando un único carácter entre comillas simples.
•
Utilizando una secuencia de escape, que es muy útil para representar caracteres
que no pueden escribirse mediante el teclado. La secuencia de escape se
representa por una barra inclinada inversa (\) seguida de un número octal de tres
dígitos, o bien por la barra seguida de la letra “u” y de un número hexadecimal de
cuatro dígitos. La secuencia de escape también debe ir encerrada entre comillas
simples. También existe una serie de secuencias de escape especiales que se
utilizan para representar algunos de los caracteres ASCII más comunes. En la
siguiente tabla se relacionan todos.
6.9.3 Constantes De Coma Flotante
Formando Emprendedores De Calidad Para Un Mundo Empresarial
56
Instituto de Educación Superior
“San Ignacio de Monterrico”
Se expresan mediante un valor numérico que incluya al menos una posición decimal. A
menos que se indique otra cosa, las constantes de coma flotante serán de tipo double.
Para denotar que la constante sea de tipo float es necesario posponer la letra “f” o “F”.
Por claridad, también pueden expresarse las constantes de tipo double posponiendo la
letra “d” o “D” al número.
Este tipo de constantes también pueden expresarse mediante la notación exponencial,
que define un número en dos partes: la mantisa y el exponente. La mantisa es un número
en coma flotante con un dígito significativo y cierto número de decimales. El exponente es
un número que representa la potencia de 10 que multiplica a la mantisa. Entre la mantisa
y el exponente se debe poner la letra “e” o “E”.
double a = 123.4; // Tipo double
float b = 123.4F; // Tipo float
double c = 4.502e-12; // Tipo double en notación exponencial.
6.9.4 Constantes De Cadena
Las constantes de cadena se representan por una secuencia de caracteres encerrados
entre comillas dobles. Dentro de ellas se pueden incluir las secuencias de escape que
antes mencionamos. Veamos algunos ejemplos:
String a = “Texto simple”; // Texto simple
String b = “Esta es la letra \u0041”;
// Usando una secuencia de escape para representar la letra “A”
String c = “El proceso ha terminado.\nPulse una tecla”; // Texto en dos líneas
6.9.5 Constantes Booleanas
Existen dos: true y false. Al contrario que en otros lenguajes de programación, ninguna
de estas constantes puede ser representada mediante un valor entero usando como
criterio la igualdad a cero.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
57
Instituto de Educación Superior
“San Ignacio de Monterrico”
6.9.6 Constante “Null”
Existe una constante nula (null) que podemos usarla para representar el valor null.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
58
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 7
SOFTWARE JAVA
Formando Emprendedores De Calidad Para Un Mundo Empresarial
59
Instituto de Educación Superior
“San Ignacio de Monterrico”
El software de Java contempla 3 plataformas para el desarrollo de aplicaciones:
7.1 J2SE (JAVA 2 STANDARD EDITION)
Es el conjunto de herramientas software que permite el desarrollo y la ejecución de
programas Java destinados al lado cliente. Se le suele llamar SDK (Software
Development Kit) o Kit de Desarrollo de Programas. Es gratuito y de libre distribución. Se
puede descargar desde la página oficial de Sun Microsystems relacionada con Java
http://java.sun.com/.
Dentro del J2SE se incluyen el compilador y la JVM (Java Virtual Machine) o Máquina
virtual de Java. También se la conoce como Intérprete de Java. Cada plataforma tiene su
propia versión. En la página de Java dentro de Sun puede descargarse el J2SE para
Windows, Linux, Solaris, etc. Si se trabaja con sistemas operativos menos corrientes
como MacOS de Apple, AIX de IBM, HP-UX de Hewlett-Packard, etc. conviene ir a
http://lopica.sourceforge.net/vm.html
7.2 J2EE (JAVA 2 ENTERPRISE EDITION)
Plataforma del lenguaje Java destinada al desarrollo de aplicaciones empresariales
estructuradas típicamente en tres capas: capa de presentación de datos, capa de lógica
de negocio y capa de datos persistentes (bases de datos). Se compone de un conjunto
de estándares y bibliotecas Java que permiten la creación de las aplicaciones
empresariales anteriormente citadas. Esta plataforma se utiliza sobre todo para
programación en servidores. Sin conocer lo fundamental de J2SE, resulta inviable
introducirse en J2EE.
7.3 J2ME (JAVA 2 MICRO EDITION)
Plataforma del lenguaje Java destinada al desarrollo de aplicaciones para pequeños
dispositivos móviles de memoria limitada, poca capacidad de procesamiento y con
Formando Emprendedores De Calidad Para Un Mundo Empresarial
60
Instituto de Educación Superior
“San Ignacio de Monterrico”
interfaces gráficas limitadas. Típicamente teléfonos móviles, PDAs (Personal Assistent
Digital), Pockets PCs, televisiones, relojes, sistemas de ayuda para automóviles, tarjetas,
etc. Como en J2EE, la base para programar mediante J2ME, es J2SE.
7.4 EL ENTORNO DE DESARROLLO DE JAVA
Existen distintos programas comerciales que permiten desarrollar código Java. La
compañía Sun, creadora de Java, distribuye gratuitamente el Java(tm) Development Kit
(JDK). Se trata de un conjunto de programas y librerías que permiten desarrollar,
compilar y ejecutar programas en Java.
Incorpora además la posibilidad de ejecutar parcialmente el programa, deteniendo la
ejecución en el punto deseado y estudiando en cada momento el valor de cada una de
las variables (con el denominado Debugger). Cualquier programador con un mínimo de
experiencia sabe que una parte muy importante (muchas veces la mayor parte) del
tiempo destinado a la elaboración de un programa se destina a la detección y corrección
de errores. Existe también una versión reducida del JDK, denominada JRE (Java
Runtime Environment) destinada únicamente a ejecutar código Java (no permite
compilar).
Los IDEs (Integrated Development Environment), tal y como su nombre indica, son
entornos de desarrollo integrados. En un mismo programa es posible escribir el código
Java, compilarlo y ejecutarlo sin tener que cambiar de aplicación. Algunos incluyen una
herramienta para realizar Debug gráficamente, frente a la versión que incorpora el JDK
basada en la utilización de una consola (denominada habitualmente ventana de
comandos de MS-DOS, en Windows NT/95/98) bastante difícil y pesada de utilizar. Estos
entornos integrados permiten desarrollar las aplicaciones de forma mucho más rápida,
incorporando en muchos casos librerías con componentes ya desarrollados, los cuales se
incorporan al proyecto o programa. Como inconvenientes se pueden señalar algunos
fallos de compatibilidad entre plataformas, y ficheros resultantes de mayor tamaño que
los basados en clases estándar.
Algunos IDEs que podemos citar son: Jcreator, Netbeans, Eclipse y Jdeveloper entre
otros.
7.5 BYTECODES
Formando Emprendedores De Calidad Para Un Mundo Empresarial
61
Instituto de Educación Superior
“San Ignacio de Monterrico”
Un programa C o C++ es totalmente ejecutable y eso hace que no sea independiente de
la plataforma y que su tamaño normalmente se dispare ya que dentro del código final hay
que incluir las librerías de la plataforma.
Proceso de compilación de un programa C++
Los programas Java no son ejecutables, no se compilan como los programas en C o C+
+.
En su lugar son interpretados por una aplicación conocida como la máquina virtual de
Java (JVM). Gracias a ello no tienen porque incluir todo el código y librerías propias de
cada sistema.
Previamente el código fuente en Java se tiene que precompilar generando un código (que
no es directamente ejecutable) previo conocido como bytecode o J-code. Ese código
(generado normalmente en archivos con extensión class) es el que es ejecutado por la
máquina virtual de Java que interpreta las instrucciones de los bytecodes, ejecutando el
código de la aplicación.
El bytecode se puede ejecutar en cualquier plataforma, lo único que se requiere es que
esa plataforma posea un intérprete adecuado (la máquina virtual de esa plataforma).
7.6 LA JAVA VIRTUAL MACHINE
La existencia de distintos tipos de procesadores y ordenadores llevó a los ingenieros de
Sun a la conclusión de que era muy importante conseguir un software que no dependiera
del tipo de procesador utilizado. Se planteó la necesidad de conseguir un código capaz
de ejecutarse en cualquier tipo de máquina. Una vez compilado no debería ser necesaria
ninguna modificación por el hecho de cambiar de procesador o de ejecutarlo en otra
máquina. La clave consistió en desarrollar un código “neutro” el cual estuviera preparado
Formando Emprendedores De Calidad Para Un Mundo Empresarial
62
Instituto de Educación Superior
“San Ignacio de Monterrico”
para ser ejecutado sobre una “máquina hipotética o virtual”, denominada Java Virtual
Machina (JVM). Es esta JVM quien interpreta este código neutro convirtiéndolo a código
particular de la CPU utilizada. Se evita tener que realizar un programa diferente para
cada CPU o plataforma.
La JVM es el intérprete de Java. Ejecuta los “bytecodes” (ficheros compilados con
extensión *.class) creados por el compilador de Java (javac.exe). Tiene numerosas
opciones entre las que destaca la posibilidad de utilizar el denominado JIT (Just-In-Time
Compiler), que puede mejorar entre 10 y 20 veces la velocidad de ejecución de un
programa. La JVM, además es un programa muy pequeño y que se distribuye
gratuitamente para prácticamente todos los sistemas operativos. A este método de
ejecución de programas en tiempo real se le llama Just in Time (JIT).
Proceso de compilación de un programa Java
7.7 LAS VARIABLES PATH Y CLASSPATH
Para poder compilar y ejecutar las aplicaciones Java es necesario tener acceso al
directorio en el que se encuentran el compilador y el intérprete. Para poder compilar y
ejecutar cómodamente deberíamos añadir el directorio “\bin” del JDK a la variable de
entorno PATH. Para los usuarios de DOS y Windows, desde el símbolo del sistema
tendremos que escribir: set PATH=%PATH%;c:\java\bin
En la explicación anterior sólo se cambia la variable de entorno PATH para la sesión en
curso (la ventana actual). La variable de entorno PATH no es específica de Java, si no
que más bien es un mecanismo de los sistemas operativos para localizar programas que
no se encuentran en el directorio actual. Pero ahora vamos con otra variable de entorno
que sí lo es, estamos hablando de CLASSPATH.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
63
Instituto de Educación Superior
“San Ignacio de Monterrico”
Java carga dinámicamente las clases según la necesidad, pero ¿dónde busca esas
clases?. Este es el papel de la variable de entorno CLASSPATH, indicar a Java donde
buscar las clases y librerías propias (el API de Java) y las clases de usuario. A partir del
JDK versión 1.1.4 sólo es necesario usar esta variable para indicar las clases de usuario.
Veamos un ejemplo. Supongamos que disponemos de una librería de clases que vamos
a usar habitualmente y que está comprimida en un fichero llamado “milibreria.zip”.
También nos interesa usar un conjunto de clases sin comprimir que están todas situadas
en un mismo directorio llamado “misclases”.
Para los usuarios de DOS y Windows, la librería está en “c:\desarrollo\libreria” y el
conjunto de clases está en “c:\desarrollo\clases”. Desde el símbolo del sistema
tendremos que escribir:
set CLASSPATH=.;c:\desarrollo\libreria\milibreria.zip;c:\desarrollo\misclases
Para que los cambios en las variables path y classpath sean permanentes hay que
comprobar que la carpeta con los ejecutables del kit de desarrollo esten incluidos en la
variable de entorno path.
Esto lo podemos comprobar escribiendo path en la línea de comandos. Si la carpeta del
kit de desarrollo no está incluida, habrá que hacerlo. Para ello en Windows 2000 o XP:
1. Pulsar el botón derecho sobre Mi PC y elegir Propiedades
2. Ir al apartado Opciones avanzadas
3. Hacer clic sobre el botón Variables de entorno
4. Añadir a la lista de la variable Path la ruta a la carpeta con los programas del JDK.
Ejemplo de contenido de la variable path:
PATH=C:\WINNT\SYSTEM32;C:\WINNT;C:\WINNT\SYSTEM32\WBEM;C:\Archivos
de
programa\Microsoft
Visual
Studio\Common\Tools\WinNT;C:\Archivos
de
programa\Microsoft
Visual
Studio\Common\MSDev98\Bin;C:\Archivos
de
programa\Microsoft Visual Studio\Common\Tools;C:\Archivos de programa\Microsoft
Visual Studio\VC98\bin;C:\Archivos de programa\j2sdk_nb\j2sdk1.4.2\bin
En negrita está señalada la ruta a la carpeta de ejecutables (carpeta bin) del kit de
desarrollo. Está carpeta varía según la instalación, para acceder a la variable
CLASSPATH: si estamos en un windows NT-2000-XP:
5. Pulsar el botón derecho sobre Mi PC y elegir Propiedades
6. Ir al apartado Opciones avanzadas
7. Hacer clic sobre el botón Variables de entorno
8. Añadir la variable CLASSPATH en la que escribiremos simplemente un punto:
Formando Emprendedores De Calidad Para Un Mundo Empresarial
64
Instituto de Educación Superior
“San Ignacio de Monterrico”
classpath=.
Noten que en CLASSPATH agregué el directorio actual (.), para poder compilar y ejecutar
desde cualquier directorio.
7.8 COMPILACIÓN Y EJECUCION DE CODIGO JAVA
El compilador Java es una de las herramientas de desarrollo incluidas en el JDK. Realiza
un análisis de sintaxis del código escrito en los ficheros fuente de Java (con extensión
*.java). Si no encuentra errores en el código genera los ficheros compilados (con
extensión *.class). En otro caso muestra la línea o líneas erróneas. En el JDK de Sun
dicho compilador se llama javac.exe. Tiene numerosas opciones, algunas de las cuales
varían de una versión a otra. Se aconseja consultar la documentación de la versión del
JDK utilizada para obtener una información detallada de las distintas posibilidades.
La compilación del código java se realiza mediante el programa javac incluido en el
software de desarrollo de java. La forma de compilar es (desde la línea de comandos):
javac archivo.java
El resultado de esto es un archivo con el mismo nombre que el archivo java pero con la
extensión class. Esto ya es el archivo con el código en forma de bytecodes. Es decir con
el código precompilado.
Si la clase es ejecutable (sólo lo son si contienen el método main), el código se puede
interpretar usando el programa java del kit de desarrollo. Sintaxis:
java archivo.class
Estos comandos hay que escribirlos desde la línea de comandos de en la carpeta en la
que se encuentre el programa. Pero antes hay que asegurarse de que los programas del
kit de desarrollo son accesibles desde cualquier carpeta del sistema. Para ello hay que
comprobar que la carpeta con los ejecutables del kit de desarrollo está incluida en la
variable de entorno path.
JAVA
.java
javac
Java Bytecode
java
Environment
Java VM
.class
Compilación de un programa Java
Formando Emprendedores De Calidad Para Un Mundo Empresarial
65
Instituto de Educación Superior
“San Ignacio de Monterrico”
7.9 TIPOS DE ARCHIVOS
• java: Es la extensión de los archivos fuente del lenguaje java, ejem.
bienvenido.java, Miapplet.java.
• class: El resultado de compilar un archivo fuente java es un archivo en byte-code
con extensión class, ejem. bienvenido.class, Miapplet.class. El comando usado
para compilar los arhivos con extensión java es javac y para su ejecución el
comando java que vienen incluidos en el JDK (Java Development Kit) de Sun
Microsystems.
• jar/zip: Las clases desarrolladas en java suelen por lo general guardarse en estos
tipos de archivos comprimidos.
7.10 EJEMPLO DE PRUEBA
Ejemplo 1
//archivo con el nombre Bienvenido.java
class Bienvenido {
public static void main(String [] args) {
System.out.println("Bienvenido a Java!");
}
}
Grábalo en TuCarpeta con el nombre Bienvenido.java luego compila y ejecuta el
programa anterior, es decir:
javac Bienvenido.java
java Bienvenido
Línea 1: es un simple comentario de tipo línea en el que hemos colocado el nombre del
fichero. El compilador ignorará todo lo que va desde los caracteres “//” hasta el final de la
línea. Los comentarios son de mucha utilidad, tanto para otras personas que tengan que
revisar el código, como para nosotros mismos en futuras revisiones.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
66
Instituto de Educación Superior
“San Ignacio de Monterrico”
Línea 2: declara el nombre de la clase. Usamos la palabra reservada class seguida del
nombre que queremos darle a nuestra clase, en este caso es “Bienvenido”. Ya sabemos
que Java es un lenguaje orientado a objetos, por tanto, nuestro programa ha de ser
definido como una clase. Por convención, las clases Java se definen con la primera letra
en mayúsculas.
Ejemplo 2
class J001 {
public static void main(String [] args) {
System.out.println("Hola\nQue tal");
System.out.println("Uno\nDos\nTres\nCuatro");
}
}
Ejemplo 3
class J002 {
public static void main(String [] args) {
System.out.println("Hola");
System.out.println("Adios");
System.out.println("");
System.out.print("Pues vale");
System.out.print("Eso");
System.out.print("Vale");
}
}
println(“mensaje”) Escribe el “mensaje” y luego se produce un cambio de línea que
equivale a pulsar [Return]
print(“mensaje”)
Escribe el “mensaje” y el cursor se sitúa al final del mensaje y en la
misma línea.
Para recordarlo piensa en la siguiente “fórmula”:
println = print + ln (línea nueva)
Formando Emprendedores De Calidad Para Un Mundo Empresarial
67
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 8
TEORIAS DE OBJETOS
Formando Emprendedores De Calidad Para Un Mundo Empresarial
68
Instituto de Educación Superior
“San Ignacio de Monterrico”
8.1 ESTRUCTURA DE UNA CLASE
Definir Atributos De La Clase (Variables, Propiedades O Datos De La Clases)
Cuando se definen los datos de una determinada clase, se debe indicar el tipo de
propiedad que es (String, int, double, int[][],...) y el especificador de acceso (public,
private,...). El especificador indica en qué partes del código ese dato será visible.
Especificadores De Acceso
Formando Emprendedores De Calidad Para Un Mundo Empresarial
69
Instituto de Educación Superior
“San Ignacio de Monterrico”
Se trata de una palabra que antecede a la declaración de una clase, método o propiedad
de clase. Hay tres posibilidades: public, protected y private. Una cuarta posibilidad es
no utilizar ninguna de estas tres palabras; entonces se dice que se ha utilizado el
modificador por defecto (friendly).
Los especificadores determinan el alcance de la visibilidad del elemento al que se
refieren. Referidos por ejemplo a un método, pueden hacer que el método sea visible sólo
para la clase que lo utiliza (private), para éstas y las heredadas (protected), para todas
las clases del mismo paquete (friendly) o para cualquier clase del tipo que sea (public).
En la siguiente tabla se puede observar la visibilidad de cada especificador:
Ejemplo:
class Persona {
public String nombre;//Se puede acceder desde cualquier clase
private int contraseña;//Sólo se puede acceder desde la
//clase Persona
protected String dirección; //Acceden a esta propiedad
//esta clase y sus descendientes
Por lo general las propiedades de una clase suelen ser privadas o protegidas, a no ser
que se trate de un valor constante, en cuyo caso se declararán como públicos.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
70
Instituto de Educación Superior
“San Ignacio de Monterrico”
Las variables locales de una clase pueden ser inicializadas.
class auto{
public nRuedas=4;
La clase persona en UML. El signo + significa public,
el signo # protected y el signo - private
8.2 DEFINIR MÉTODOS DE CLASE (OPERACIONES O FUNCIONES DE CLASE)
Un método es una llamada a una operación de un determinado objeto. Al realizar esta
llamada (también se le llama enviar un mensaje), el control del programa pasa a ese
método y lo mantendrá hasta que el método finalice o se haga uso de return.
Para que un método pueda trabajar, normalmente hay que pasarle unos datos en forma
de argumentos o parámetros, cada uno de los cuales se separa por comas.
Ejemplos de llamadas:
balón.botar(); //sin argumentos
miCoche.acelerar(10);
ficha.comer(posición15);//posición 15 - variable que se pasa como argumento
partida.empezarPartida(“18:15”,colores);
Formando Emprendedores De Calidad Para Un Mundo Empresarial
71
Instituto de Educación Superior
“San Ignacio de Monterrico”
Los métodos de la clase se definen dentro de ésta. Hay que indicar un modificador de
acceso (public, private, protected o ninguno, al igual que ocurre con las variables y con
la propia clase) y un tipo de datos, que indica qué tipo de valores devuelve el método.
Esto último se debe a que los métodos son funciones que pueden devolver un
determinado valor (un entero, un texto, un valor lógico,...) mediante el comando return. Si
el método no devuelve ningún valor, entonces se utiliza el tipo void que significa que no
devuelve valores (en ese caso el método no tendrá instrucción return).
El último detalle a tener en cuenta es que los métodos casi siempre necesitan datos para
realizar la operación, estos datos van entre paréntesis y se les llama argumentos. Al
definir el método hay que indicar que argumentos se necesitan y de qué tipo son.
Ejemplo:
public class vehiculo {
/** Función principal */
int ruedas;
private double velocidad=0;
String nombre;
/** Aumenta la velocidad*/
public void acelerar(double cantidad) {
velocidad += cantidad;
}
/** Disminuye la velocidad*/
public void frenar(double cantidad) {
velocidad -= cantidad;
}
/** Devuelve la velocidad*/
public double obtenerVelocidad(){
Formando Emprendedores De Calidad Para Un Mundo Empresarial
72
Instituto de Educación Superior
“San Ignacio de Monterrico”
return velocidad;
}
public static void main(String args[]){
vehiculo miCoche = new vehiculo();
miCoche.acelerar(12);
miCoche.frenar(5);
System.out.println(miCoche.obtenerVelocidad());
} // Da 7.0
En la clase anterior, los métodos acelerar y frenar son de tipo void por eso no tienen
sentencia return. Sin embargo el método obtenerVelocidad es de tipo double por lo que
su resultado es devuelto por la sentencia return y puede ser escrito en pantalla.
Versión UML de la clase Coche
8.3 ARGUMENTOS POR VALOR Y POR REFERENCIA
En todos los lenguajes éste es un tema muy importante. Los argumentos son los datos
que recibe un método y que necesita para funcionar. Ejemplo:
public class Matemáticas {
Formando Emprendedores De Calidad Para Un Mundo Empresarial
73
Instituto de Educación Superior
“San Ignacio de Monterrico”
public double factorial(int n){
double resultado;
for (resultado=n;n>1;n--) resultado*=n;
return resultado;
}
...
public static void main(String args[]){
Matemáticas m1=new Matemáticas();
double x=m1.factorial(25);//Llamada al método
}
En el ejemplo anterior, el valor 25 es un argumento requerido por el método factorial
para que éste devuelva el resultado (que será el factorial de 25). En el código del método
factorial, este valor 25 es copiado a la variable n, que es la encargada de almacenar y
utilizar este valor.
Se dice que los argumentos son por valor, si la función recibe una copia de esos datos,
es decir la variable que se pasa como argumento no estará afectada por el código.
Ejemplo:
class prueba {
public void metodo1(int entero){
entero=18;
...
}
...
public static void main(String args[]){
int x=24;
Formando Emprendedores De Calidad Para Un Mundo Empresarial
74
Instituto de Educación Superior
“San Ignacio de Monterrico”
prueba miPrueba = new prueba();
miPrueba.metodo1(x);
System.out.println(x); //Escribe 24, no 18
}
Este es un ejemplo de paso de parámetros por valor. La variable x se pasa como
argumento o parámetro para el método metodo1, allí la variable entero recibe una copia
del valor de x en la variable entero, y a esa copia se le asigna el valor 18. Sin embargo
la variable x no está afectada por esta asignación.
Sin embargo en este otro caso:
class prueba {
public void metodo1(int[] entero){
entero[0]=18;
...
}
...
public static void main(String args[]){
int x[]={24,24};
prueba miPrueba = new prueba();
miPrueba.metodo1(x);
System.out.println(x[0]); //Escribe 18, no 24
Aquí sí que la variable x está afectada por la asignación entero[0]=18. La razón es porque
en este caso el método no recibe el valor de esta variable, sino la referencia, es decir la
dirección física de esta variable. entero no es una replica de x, es la propia x llamada de
otra forma.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
75
Instituto de Educación Superior
“San Ignacio de Monterrico”
Los tipos básicos (int, double, char, boolean, float, short y byte) se pasan por valor.
También se pasan por valor las variables String. Los objetos y arrays se pasan por
referencia.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
76
Instituto de Educación Superior
“San Ignacio de Monterrico”
8.4 MÉTODOS Y CONSTRUCTORES
Los métodos son funciones que pueden ser llamadas dentro de la clase o por otras
clases. El constructor es un tipo específico de método que siempre tiene el mismo
nombre que la clase.
Cuando se declara una clase en Java, se pueden declarar uno o más constructores
opcionales que realizan la inicialización cuando se instancia (se crea una ocurrencia) un
objeto de dicha clase.
Utilizando el código de ejemplo anterior, cuando se crea una nueva instancia de MiClase,
se crean (instancian) todos los métodos y variables, y se llama al constructor de la clase:
MiClase mc;
mc = new MiClase();
La palabra clave new se usa para crear una instancia de la clase. Antes de ser
instanciada con new no consume memoria, simplemente es una declaración de tipo.
Después de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc será igual a
10. Se puede referenciar la variable (de instancia) i con el nombre del objeto:
mc.i++; // incrementa la instancia de i de mc
Al tener mc todas las variables y métodos de MiClase, se puede usar la primera sintaxis
para llamar al método Suma_a_i() utilizando el nuevo nombre de clase mc:
mc.Suma_a_i( 10 );
y ahora la variable mc.i vale 21.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
77
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 9
ESTRUCTURAS DE CONTROL DE FLUJO
Formando Emprendedores De Calidad Para Un Mundo Empresarial
78
Instituto de Educación Superior
“San Ignacio de Monterrico”
9.1 IF
Permite crear estructuras condicionales simples; en las que al cumplirse una condición se
ejecuta una serie de instrucciones. Se puede hacer que otro conjunto de instrucciones se
ejecute si la condición es falsa. La condición es cualquier expresión que devuelva un
resultado de true o false. La sintaxis de la instrucción if es:
if (condición) {
instrucciones que se ejecutan si la condición es true
}
else {
instrucciones que se ejecutan si la condición es false
}
La parte else es opcional. Ejemplo:
if ((diasemana>=1) && (diasemana<=5)){
trabajar = true;
}
else {
trabajar = false;
}
Se pueden anidar varios if a la vez. De modo que se comprueban varios valores.
Ejemplo:
if (diasemana==1) dia=”Lunes”;
else if (diasemana==2) dia=”Martes”;
Formando Emprendedores De Calidad Para Un Mundo Empresarial
79
Instituto de Educación Superior
“San Ignacio de Monterrico”
else if (diasemana==3) dia=”Miércoles”;
else if (diasemana==4) dia=”Jueves”;
else if (diasemana==5) dia=”Viernes”;
else if (diasemana==6) dia=”Sábado”;
else if (diasemana==7) dia=”Domingo”;
else dia=”?”;
9.2 SWITCH
Es la estructura condicional compleja porque permite evaluar varios valores a la vez.
Sintaxis:
switch (expresión) {
case valor1: sentencias si la expresiona es igual al valor1;
[break]
case valor2: sentencias si la expresiona es igual al valor2;
[break]
.
.
default:
sentencias que se ejecutan si no se cumple ninguna de las anteriores
}
Esta instrucción evalúa una expresión (que debe ser short, int, byte o char), y según el
valor de la misma ejecuta instrucciones. Cada case contiene un valor de la expresión; si
efectivamente la expresión equivale a ese valor, se ejecutan las instrucciones de ese
case y de los siguientes.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
80
Instituto de Educación Superior
“San Ignacio de Monterrico”
La instrucción break se utiliza para salir del switch. De tal modo que si queremos que
para un determinado valor se ejecuten las instrucciones de un apartado case y sólo las
de ese apartado, entonces habrá que finalizar ese case con un break.
El bloque default sirve para ejecutar instrucciones para los casos en los que la expresión
no se ajuste a ningún case.
Ejemplo 1:
switch (diasemana) {
case 1:
dia=”Lunes”;
break;
case 2:
dia=”Martes”;
break;
case 3:
dia=”Miércoles”;
break;
case 4:
dia=”Jueves”;
break;
case 5:
dia=”Viernes”;
break;
case 6:
dia=”Sábado”;
break;
Formando Emprendedores De Calidad Para Un Mundo Empresarial
81
Instituto de Educación Superior
“San Ignacio de Monterrico”
case 7:
dia=”Domingo”;
break;
default:
dia=”?”;
}
Ejemplo 2:
switch (diasemana) {
case 1:
case 2:
case 3:
case 4:
case 5:
laborable=true;
break;
case 6:
case 7:
laborable=false;
}
9.3 WHILE
Formando Emprendedores De Calidad Para Un Mundo Empresarial
82
Instituto de Educación Superior
“San Ignacio de Monterrico”
La instrucción while permite crear bucles. Un bucle es un conjunto de sentencias que se
repiten si se cumple una determinada condición. Los bucles while agrupan instrucciones
las cuales se ejecutan continuamente hasta que una condición que se evalúa sea falsa.
La condición se mira antes de entrar dentro del while y cada vez que se termina de
ejecutar las instrucciones del while
Sintaxis:
while (condición) {
sentencias que se ejecutan si la condición es true
}
Ejemplo (cálculo del factorial de un número, el factorial de 4 sería: 4*3*2*1):
//factorial de 4
int n=4, factorial=1, temporal=n;
while (temporal>0) {
factorial*=temporal--;
}
9.4 DO WHILE
Crea un bucle muy similar al anterior, en la que también las instrucciones del bucle se
ejecutan hasta que una condición pasa a ser falsa. La diferencia estriba en que en este
tipo de bucle la condición se evalúa después de ejecutar las instrucciones; lo cual
significa que al menos el bucle se ejecuta una vez. Sintaxis:
do {
instrucciones
} while (condición)
9.5 FOR
Formando Emprendedores De Calidad Para Un Mundo Empresarial
83
Instituto de Educación Superior
“San Ignacio de Monterrico”
Es un bucle más complejo especialmente pensado para rellenar arrays o para ejecutar
instrucciones controladas por un contador. Una vez más se ejecutan una serie de
instrucciones en el caso de que se cumpla una determinada condición. Sintaxis:
for (expresiónInicial; condición; expresiónEncadavuelta) {
instrucciones;
}
La expresión inicial es una instrucción que se ejecuta una sola vez: al entrar por primera
vez en el bucle for (normalmente esa expresión lo que hace es dar valor inicial al
contador del bucle).
La condición es cualquier expresión que devuelve un valor lógico. En el caso de que esa
expresión sea verdadera se ejecutan las instrucciones. Cuando la condición pasa a ser
falsa, el bucle deja de ejecutarse. La condición se valora cada vez que se terminan de
ejecutar las instrucciones del bucle.
Después de ejecutarse las instrucciones interiores del bucle, se realiza la expresión que
tiene lugar tras ejecutarse las instrucciones del bucle (que, generalmente, incrementa o
decrementa al contador). Luego se vuelve a evaluar la condición y así sucesivamente
hasta que la condición sea falsa.
Ejemplo (factorial):
//factorial de 4
int n=4, factorial=1, temporal=n;
for (temporal=n;temporal>0;temporal--){
factorial *=temporal;
}
Sentencias De Salida De Un Bucle
Formando Emprendedores De Calidad Para Un Mundo Empresarial
84
Instituto de Educación Superior
“San Ignacio de Monterrico”
9.6 BREAK
Es una sentencia que permite salir del bucle en el que se encuentra inmediatamente. Hay
que intentar evitar su uso ya que produce malos hábitos al programar.
9.7 CONTINUE
Instrucción que siempre va colocada dentro de un bucle y que hace que el flujo del
programa ignore el resto de instrucciones del bucle; dicho de otra forma, va hasta la
siguiente iteración del bucle. Al igual que ocurría con break, hay que intentar evitar su
uso.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
85
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 10
CLASE MATH Y STRING
Formando Emprendedores De Calidad Para Un Mundo Empresarial
86
Instituto de Educación Superior
“San Ignacio de Monterrico”
10.1 CLASE STRING
Para Java las cadenas de texto son objetos especiales. Los textos deben manejarse
creando objetos de tipo String. Ejemplo:
String texto1 = “¡Prueba de texto!”;
Las cadenas pueden ocupar varias líneas utilizando el operador de concatenación “+”.
String texto2 =”Este es un texto que ocupa “ + “varias líneas, no obstante se puede
“+“perfectamente encadenar”;
También se pueden crear objetos String sin utilizar constantes entrecomilladas, usando
otros constructores:
char[] palabra = {‘P’,’a’,’l’,’b’,’r’,’a’};//Array de char
String cadena = new String(palabra);
byte[] datos = {97,98,99};
String codificada = new String (datos, “8859_1”);
En el último ejemplo la cadena codificada se crea desde un array de tipo byte que
contiene números que serán interpretados como códigos Unicode. Al asignar, el valor
8859_1 indica la tabla de códigos a utilizar.
Comparación Entre Objetos String
Formando Emprendedores De Calidad Para Un Mundo Empresarial
87
Instituto de Educación Superior
“San Ignacio de Monterrico”
Los objetos String no pueden compararse directamente con los operadores de
comparación. En su lugar se deben utilizar estas expresiones:
•
cadena1.equals(cadena2). El resultado es true si la cadena1 es igual a la
cadena2. Ambas cadenas son variables de tipo String.
•
cadena1.equalsIgnoreCase(cadena2). Como la anterior, pero en este caso no se
tienen en cuentas mayúsculas y minúsculas.
•
s1.compareTo(s2). Compara ambas cadenas, considerando el orden alfabético.
Si la primera cadena es mayor en orden alfabético que la segunda devuelve 1, si
son iguales devuelve 0 y si es la segunda la mayor devuelve -1. Hay que tener en
cuenta que el orden no es el del alfabeto español, sino que usa la tabla ASCII, en
esa tabla la letra ñ es mucho mayor que la o.
•
s1.compareToIgnoreCase(s2). Igual que la anterior, sólo que además ignora las
mayúsculas (disponible desde Java 1.2)
10.2 STRING.VALUEOF
Este método pertenece no sólo a la clase String, sino a otras y siempre es un método que
convierte valores de una clase a otra. En el caso de los objetos String, permite convertir
valores que no son de cadena a forma de cadena. Ejemplos:
String numero = String.valueOf(1234);
String fecha = String.valueOf(new Date());
En el ejemplo se observa que este método pertenece a la clase String directamente, no
hay que utilizar el nombre del objeto creado (como se verá más adelante, es un método
estático).
10.3 LA CLASE MATH
Se echan de menos operadores matemáticos más potentes en Java. Por ello se ha
incluido una clase especial llamada Math dentro del paquete java.lang Para poder utilizar
esta clase, se debe incluir esta instrucción:
Formando Emprendedores De Calidad Para Un Mundo Empresarial
88
Instituto de Educación Superior
“San Ignacio de Monterrico”
import java.lang.Math;
Esta clase posee métodos muy interesantes para realizar cálculos matemáticos
complejos. Por ejemplo:
double x= Math.pow(3,3); //x es 33
Math posee dos constantes, que son:
Por otro lado posee numerosos métodos que son:
Formando Emprendedores De Calidad Para Un Mundo Empresarial
89
Instituto de Educación Superior
“San Ignacio de Monterrico”
Formando Emprendedores De Calidad Para Un Mundo Empresarial
90
Instituto de Educación Superior
“San Ignacio de Monterrico”
CAPITULO 11
ARREGLOS
Formando Emprendedores De Calidad Para Un Mundo Empresarial
91
Instituto de Educación Superior
“San Ignacio de Monterrico”
11.1 ARRAYS UNIDIMENSIONALES
Un array es una colección de valores de un mismo tipo engrosados en la misma variable.
De forma que se puede acceder a cada valor independientemente. Para Java además un
array es un objeto que tiene propiedades que se pueden manipular.
Los arrays solucionan problemas concernientes al manejo de muchas variables que se
refieren a datos similares. Por ejemplo si tuviéramos la necesidad de almacenar las notas
de una clase con 18 alumnos, necesitaríamos 18 variables, con la tremenda lentitud de
manejo que supone eso. Solamente calcular la nota media requeriría una tremenda línea
de código. Almacenar las notas supondría al menos 18 líneas de código.
Gracias a los arrays se puede crear un conjunto de variables con el mismo nombre. La
diferencia será que un número (índice del array) distinguirá a cada variable. En el caso de
las notas, se puede crear un array llamado notas, que representa a todas las notas de la
clase. Para poner la nota del primer alumno se usaría notas[0], el segundo sería notas[1],
etc. (los corchetes permiten especificar el índice en concreto del array).
La declaración de un array unidimensional se hace con esta sintaxis: tipo nombre[];
Ejemplo:
double cuentas[]; //Declara un array que almacenará valores doubles
Formando Emprendedores De Calidad Para Un Mundo Empresarial
92
Instituto de Educación Superior
“San Ignacio de Monterrico”
Declara un array de tipo double. Esta declaración indica para qué servirá el array, pero no
reserva espacio en la RAM al no saberse todavía el tamaño del mismo.
Tras la declaración del array, se tiene que iniciar. Eso lo realiza el operador new, que es
el que realmente crea el array indicando un tamaño. Cuando se usa new es cuando se
reserva el espacio necesario en memoria. Un array no inicializado es un array null.
Ejemplo:
int notas[]; //sería válido también int[] notas;
notas = new int[3]; //indica que el array constará de tres
//valores de tipo int
//También se puede hacer todo a la vez
//int notas[]=new int[3];
En el ejemplo anterior se crea un array de tres enteros (con los tipos básicos se crea en
memoria el array y se inicializan los valores, los números se inician a 0).
Los valores del array se asignan utilizando el índice del mismo entre corchetes:
notas[2]=8;
También se pueden asignar valores al array en la propia declaración:
int notas[] = {8, 7, 9};
int notas2[]= new int[] {8,7,9};//Equivalente a la anterior
Esto declara e inicializa un array de tres elementos. En el ejemplo lo que significa es que
notas[0] vale 8, notas[1] vale 7 y notas[2] vale 9.
En Java (como en otros lenguajes) el primer elemento de un array es el cero. El primer
elemento del array notas, es notas[0]. Se pueden declarar arrays a cualquier tipo de
datos (enteros, booleanos, doubles, ... e incluso objetos).
Formando Emprendedores De Calidad Para Un Mundo Empresarial
93
Instituto de Educación Superior
“San Ignacio de Monterrico”
La ventaja de usar arrays (volviendo al caso de las notas) es que gracias a un simple
bucle for se puede rellenar o leer fácilmente todos los elementos de un array:
//Calcular la media de las 18 notas
suma=0;
for (int i=0;i<=17;i++){
suma+=nota[i];
}
media=suma/18;
A un array se le puede inicializar las veces que haga falta:
int notas[]=new notas[16];
...
notas=new notas[25];
Pero hay que tener en cuenta que el segundo new hace que se pierda el contenido
anterior. Realmente un array es una referencia a valores que se almacenan en memoria
mediante el operador new, si el operador new se utiliza en la misma referencia, el
anterior contenido se queda sin referencia y, por lo tanto se pierde.
Un array se puede asignar a otro array (si son del mismo tipo):
int notas[];
int ejemplo[]=new int[18];
notas=ejemplo;
En el último punto, notas equivale a ejemplo. Esta asignación provoca que cualquier
cambio en notas también cambie el array ejemplos. Es decir esta asignación anterior, no
copia los valores del array, sino que notas y ejemplo son referencias al mismo array.
Formando Emprendedores De Calidad Para Un Mundo Empresarial
94
Instituto de Educación Superior
“San Ignacio de Monterrico”
Ejemplo:
int notas[]={3,3,3};
int ejemplo[]=notas;
ejemplo= notas;
ejemplo[0]=8;
System.out.println(notas[0]);//Escribirá el número 8
11.2 ARRAYS MULTIDIMENSIONALES
Los arrays además pueden tener varias dimensiones. Entonces se habla de arrays de
arrays (arrays que contienen arrays) Ejemplo:
int notas[][];
notas es un array que contiene arrays de enteros
notas = new int[3][12];//notas está compuesto por 3 arrays
//de 12 enteros cada uno
notas[0][0]=9;//el primer valor es 0
Puede haber más dimensiones incluso (notas[3][2][7]). Los arrays multidimensionales se
pueden inicializar de forma más creativa incluso. Ejemplo:
int notas[][]=new int[5][];//Hay 5 arrays de enteros
notas[0]=new int[100]; //El primer array es de 100 enteros
notas[1]=new int[230]; //El segundo de 230
notas[2]=new int[400];
notas[3]=new int[100];
Formando Emprendedores De Calidad Para Un Mundo Empresarial
95
Instituto de Educación Superior
“San Ignacio de Monterrico”
notas[4]=new int[200];
Hay que tener en cuenta que en el ejemplo anterior, notas[0] es un array de 100 enteros.
Mientras que notas, es un array de 5 arrays de enteros.
Se pueden utilizar más de dos dimensiones si es necesario.
11.3 LONGITUD DE UN ARRAY
Los arrays poseen un método que permite determinar cuánto mide un array. Se trata de
length. Ejemplo (continuando del anterior):
System.out.println(notas.length); //Sale 5
System.out.println(notas[2].length); //Sale 400
11.4 LA CLASE ARRAYS
En el paquete java.utils se encuentra una clase estática llamada Arrays. Una clase
estática permite ser utilizada como si fuera un objeto (como ocurre con Math). Esta clase
posee métodos muy interesantes para utilizar sobre arrays.
Su uso es Arrays.método(argumentos);
11.4.1 Fill
Permite rellenar todo un array unidimensional con un determinado valor. Sus argumentos
son el array a rellenar y el valor deseado:
int valores[]=new int[23];
Arrays.fill(valores,-1);//Todo el array vale -1
También permite decidir desde que índice hasta qué índice rellenamos:
Formando Emprendedores De Calidad Para Un Mundo Empresarial
96
Instituto de Educación Superior
“San Ignacio de Monterrico”
Arrays.fill(valores,5,8,-1);//Del elemento 5 al 7 valdrán -1
11.4.2 Equals
Compara dos arrays y devuelve true si son iguales. Se consideran iguales si son del
mismo tipo, tamaño y contienen los mismos valores.
11.4.3 Sort
Permite ordenar un array en orden ascendente. Se pueden ordenar sólo una serie de
elementos desde un determinado punto hasta un determinado punto.
int x[]={4,5,2,3,7,8,2,3,9,5};
Arrays.sort(x);//Estará ordenado
Arrays.sort(x,2,5);//Ordena del 2º al 4º elemento
11.4.4 BinarySearch
Permite buscar un elemento de forma ultrarrápida en un array ordenado (en un array
desordenado sus resultados son impredecibles). Devuelve el índice en el que está
colocado el elemento. Ejemplo:
int x[]={1,2,3,4,5,6,7,8,9,10,11,12};
Arrays.sort(x);
System.out.println(Arrays.binarySearch(x,8));//Da 7
11.4.5 System.arraysCopy
Formando Emprendedores De Calidad Para Un Mundo Empresarial
97
Instituto de Educación Superior
“San Ignacio de Monterrico”
La clase System también posee un método relacionado con los arrays, dicho método
permite copiar un array en otro. Recibe cinco argumentos: el array que se copia, el índice
desde que se empieza a copia en el origen, el array destino de la copia, el índice desde el
que se copia en el destino, y el tamaño de la copia (número de elementos de la copia).
int uno[]={1,1,2};
int dos[]={3,3,3,3,3,3,3,3,3};
System.arraycopy(uno, 0, dos, 0, uno.length);
for (int i=0;i<=8;i++){
System.out.print(dos[i]+" ");
} //Sale 112333333
Formando Emprendedores De Calidad Para Un Mundo Empresarial
98
Instituto de Educación Superior
“San Ignacio de Monterrico”
BIBLIOGRAFIA
•
1001 Tips Para Programar Con Java de Vásquez Paragulla.
•
Java 2 de Ceballos F. J.
•
Programación en Java con Jbuilder: Erika Alarcón HerreraChristian Crovetto Huerta
•
El descubrimiento de Java Mark Samns
Formando Emprendedores De Calidad Para Un Mundo Empresarial
99