Sei sulla pagina 1di 6

1

Visión Socrática de la conformación de una Clase en Java


Objetivo: Entender los componentes y estructura de una clase básica y, programar

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.

Fase de programación (fuente)


Un archivo ya no es equivalente a una clase, un archivo puede contener una o más clases.
// Atento ahora los nombres empiezan con mayúsculas.
MiClase.java // nombre del archivo fuente
class MiClase{
.....
}
class TuClase{
.....
}
2

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.

Fases de compilación y ejecución


Si tenemos:
MiClase.java // nombre del archivo
class MiClase{
public static void main(String[] args){
System.out.println("Hola desde la main");
}
}
class TuClase{
void saludo(){
System.out.println("Hola desde saludo");
}
}

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++.

¿Como usar a TuClase? Lo podemos usar como objeto, desde MiClase:


MiClase.java // nombre del archivo
class MiClase{
public static void main(String[] args){
System.out.println("Hola desde la main");
TuClase tu = new TuClase(); // se crea el objeto tu
tu.saludo(); // Se ejecuta una función de otra clase (TuClase)
} // Este es uno de los más grandes ENRIQUECIMIENTOS
}
class TuClase{
void saludo(){
System.out.println("Hola desde saludo");
}
}
Compilamos:
javac MiClase.java
Se genera un archivo para cada clase: MiClase.class y TuClase.class

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

MiClase.java // nombre del archivo


class MiClase{
public static void main(String[] args){ // modificador static
System.out.println("Hola desde la main");
saludo();
}
static void saludo(){ // modificador static
System.out.println("Hola desde saludo");
}
}
Compilamos:
javac MiClase.java
Se genera un archivo para cada clase: MiClase.class
Note que las dos funciones tienen el modificador static; si no fuera así no compila, veremos el porque más
adelante.
Ejecutamos:
java MiClase
Salida:
Hola desde la main
Hola desde saludo // buena salida

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

Métodos ≡ funciones ≡ comportamientos.


Una clase, puede estar compuesta por uno y/o dos “niveles”
• objeto: todos sus componentes NO tienen el modificador static:
class MiClase{
int largo = 10; // atributo no tiene static
int largo2(){ // método no tiene static
return largo*largo;
}
}
Compila : javac MiClase.java
No ejecuta por comando: java MiClase // da error.
Se debe crear (definir) : MiClase miObj = new MiClase();
Ejecuta el método : miObj.largo2();
MiClase funciona como un objeto que presta servicios.

• Clase: todos sus componentes tienen el modificador static.


class MiClase{
static int largo = 10;
public static void main(String[] args){
System.out.println("largo2 = " + largo2()); // llama a lago(2)
}
static int largo2(){
return largo*largo;
}
}
Salida
largo2 = 100
Compila: javac MiClase.java
Ejecuta : java MiClase // requiere tener el método main
MiClase funciona como Clase en modo directo, como en C++.
6

• 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.

Nota crítica ¿Por qué todo tan retorcido Sócrates?


¡Jovencito el mundo no es sencillo! Con un poco de estudio y práctica entenderá esta primera
aproximación y algunos complementos que veremos más adelante.
Le garantizo que este modelo es uno de los que mejor interpreta a T O D A L A N A T U R A L E Z A;
como caso de éxito le menciono a la Empresa Google que aplica este modelo.
¡TODO FUNCIONA ASÍ! Aunque no lo percibamos directamente.

Potrebbero piacerti anche