Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Partimos de que conocemos C++ a nivel Programación estructurada y modular (curso CC112).
Definición Ejemplos
Programa: Conjunto de instrucciones para ejecutar una tarea, por ejemplo, // saludo.c, autor C. Bazán, enero 20XX
el programa saludo.c saluda al mundo: #include<iostream> // flujos de entrada/salida (io)
using namespace std;
main(){
cout << "Hola Mundo\n"; // \n salta línea
}
Un editor especializado, puede numerar las líneas del programa y dar 01 // saludo.c, autor C. Bazán, enero 20XX
colores distintos a las palabras para indicar la categoría a la que 02 #include<iostream>
pertenecen; por ejemplo si es reservada, comentario, o carácter o de 03 using namespace std;
instrucción: 04 main(){
Usted escribe el texto y el editor numera la línea y colorea 05 cout << "Hola Mundo\n";
automáticamente. 06 }
Si su editor no edita así, puede configurarlo.
Atributos de calidad y gestión de un programa
1) Alcance: satisfacer el objetivo (resolver el problema). De ser posible mejorar la calidad y cantidad.
2) Amigable (user friendly): La dinámica del flujo de operación (entradas de datos y salidas de información) debe ser claro y sencillo.
3) Precisión: verificarlo con la Matriz de Casos de Prueba, el cual es un indicador de ausencia de errores de lógica.
4) Escritura: claro (ordenado, indentado y documentado) para facilitar la comprensión, mantenimiento, mejoras y ampliaciones.
Especificar las posibles mejoras y debilidades.
5) Eficiente: ejecución veloz.
6) Técnico: Basado en el análisis, diseño y prueba del programa, los cuales garantizan robustez conceptual.
7) Gestión de personal: responsables, especialistas y usuarios para opitimizar tiempos, personal y otros recursos.
Java toma su base en C++ y lo ENRIQUECE, a su manera, con la orientación a objetos. Acá hablaremos
de esos ENRIQUECIMIENTOS.
Sabemos que en C++ un archivo tiene un nombre, ejemplo, miProg.c, en él se escribe un programa, al
cual nos referimos como miProg.c, lo compilamos y se crea el archivo (programa) ejecutable que le
podemos dar un nombre, por ejemplo: miProg.exe. Tenemos dos programas ≡ archivos: miProg.c
(fuente) y miProg.exe (compilado).
C++ aplica la programación estructurada y modular (funciones) dentro del programa y es aíslado de otros
programas.
En Java es diferente:
En lugar de programa, hablaremos de clase: Una clase MiClase.java (fuente) y MiClase.class
(compilada), es como un programa muy ENRIQUECIDO: aplica la programación estructurada y modular
(funciones) de otras clases, trabaja en equipo con otros clases.
Un archivo puede contener 0 ó 1 clase pública y el nombre del archivo será igual al de la clase:
MiClase.java
Public class MiClase{ // se recomienda que la clase pública este al inicio; pero no es obligatorio
.....
}
class TuClase{
.....
}
El nombre de un archivo puede o no ser igual al de alguna clase que contiene, es válido:
CuaquierNombre.java // nombre del archivo
class MiClase{
.....
}
class TuClase{
.....
}
Pero no es recomendable porque no sabemos que contiene el archivo CuaquierNombre.java; se
recomienda que el nombre del archivo sea igual al de la primera clase.
¿Por qué se agrupan varias clases dentro de un archivo? Porque ahora las clases se interrelacionan entre
ellas, ya no son aisladas, como en C++. El archivo representa al todo, las clases son las partes.
También puede usar un archivo para cada clase, siempre que compile primero las clases que serán usadas
desde otras clases; pero es un poco molestoso.
Compilamos:
javac MiClase.java
Se genera un archivo para cada clase: MiClase.class y TuClase.class
Ejecutamos:
java MiClase
Salida:
Hola desde la main // buena salida
3
Ejecutamos:
java TuClase
Compiló bien, esperábamos que escriba:
Hola desde saludo
Sin embargo dio el error: no se ha encontrado el método principal (main) en la clase TuClase.
El error se debe a que TuClase no tiene el método main:
public static void main(String[] args){
// ....
}
que es la puerta de entrada a la ejecución cuando la clase es ejecutada, como en C++.
Ejecutamos:
java MiClase
Hola desde la main
Hola desde saludo // buena salida
java TuClase
Compiló bien, pero sabemos que va a dar el error al ejecutar: TuClase no tiene el método main
en efecto así sucede.
Moraleja: MiClase y TuClase son dos clases con identidad individual, pero no trabajan solas, trabajan
en equipo. Así es como se trabaja para programar clases importantes, por ejemplo, Math es una sola clase
que contiene todas las funciones usuales de matemáticas, muchas otras clases llaman a Math para evaluar
una función.
Nota crítica
Mucho ENRIQUECIMIENTO; para las clases grandes es adecuado, pero para clases pequeñas es mucho
trabajo, ¿No hay una forma más rápida de obtener el mismo resultado? Sí, trabajando con un solo
programa, com en C++:
4
Nota crítica
Retrocedimos a C++ y perdimos los objetos, que dicen que son importantes. Vamos a recuperar los
objetos:
MiClase.java // nombre del archivo
class MiClase{
public static void main(String[] args){ // modificador static
System.out.println("Hola desde la main");
MiClase mi = new MiClase(); // Se crea el objeto mi
mi.saludo(); // se usa a mi
}
void saludo(){ // sin modificador static
System.out.println("Hola desde saludo");
}
}
Compilamos:
javac MiClase.java
Se genera un archivo para la clase: MiClase.class
Note que la parte sin static funciona como objeto.
Ejecutamos:
java MiClase
Salida:
Hola desde la main
Hola desde saludo // buena salida
Nota crítica ¡Esto parece un rompecabeza! ¿Cuándo se usa static y cuando no?
Vamos a despejar los misterios.
Al igual que un programa, una clase, tiene dos componentes:
Atributos ≡ variables globales.
También usa variabes locales dentro de sus métodos
5
• Clase y objeto: algunos componentes tienen el modificador static y otros no, se recomienda escribir
ordenadamente y cumplir:
• Los métodos sin static llaman/usan todos los métodos y atributos.
• Los métodos static llaman/usan solo a los métodos y atributos static.
Llaman/usan a métodos y atributos no static a través de objetos:
Miclase miObj = new Miclase();
miObj.atributoNoStatic; miObj.metodoNoStatic();
class MiClase{
static int largo = 10;
int ancho = 2;
public static void main(String[] args){
System.out.println("largo2 = " + largo2() + "\n"); // llama a atatic
// System.out.println("ancho2 = " + ancho2()); NO puede llamar a no static
MiClase miObj = new MiClase();
System.out.println("ancho2 = " + miObj.ancho2()); // llama a no static
}
static int largo2(){
return largo*largo;
}
int ancho2(){
System.out.println("largo2 = " + largo2()); // LLAMA A STATIC
return ancho*ancho;
}
}
Salida
largo2 = 100
largo2 = 100
ancho2 = 46
MiClase se comporta como Clase para la parte static y como objeto para la parte no static.
Compila : javac MiClase.java
El nivel static puede ejecutarse por comando: java MiClase // requiere tener la main()
El nivel no static:
NO ejecuta por comando: el comando java MiClase activa solo la parte static.
Se debe crear (definir) : MiClase miObj = new MiClase();
Ejecutar un método : miObj.ancho2();
1) El nivel static de MiClase funciona como Clase en modo directo, como en C++.
2) El nivel no static de MiClase funciona como un objeto que presta servicios, a MiClase y otras
clases que lo llamen.
3) El nivel Clase suele ser un gestor de todos los objetos que se crean.