Entrada destacada

Ventajas y desventajas de .net , java y c++

.net VENTAJAS: * Posee una curva de aprendizaje muy rápida. * Integra el diseño e implementación de formularios de Windows. ...

miércoles, 3 de junio de 2015

Temario de programacion en java C:

http://profesores.fi-b.unam.mx/carlos/java/indice.html
Estructura de lenguaje en java

Comentarios



Java ofrece tres tipos de comentarios: dos para comentarios regulares en el código fuente y uno para la documentación especial del sistema javadoc.
  • Comentarios de varias líneas.
Los comentarios de varias líneas se incluyen entre los símbolos /* y */, como en C y C++.
/*
Este es un ejemplo de
un comentario de varias
líneas.
*/
  • Comentarios de una sola línea.
Para comentariar una sola línea se utiliza la doble diagonal //. El comentario se inicia cuando se encuentra la doble diagonal y continua hasta el final de la línea.
// Este es un comentario de una sola linea
                               //Este es otro comentario
  • Comentarios para documentación.
Realmente este tipo de comentario es el mismo que el de varias líneas con la diferencia de que la información que contenga será usada para un procesamiento especial que lleva a cabo la herramienta javadoc.

Se distingue del comentario de varias líneas porque se agrega un asterisco adicional al inicio del comentario.
/**
Este tipo de comentarios
los utiliza la
herramienta javadoc
*/
Identificadores

Un identificador es una secuencia de caracteres comenzando por una letra y conteniendo letras y números. Los identificadores no se limitan a los caracteres ASCII, si el editor de texto lo soporta, se pueden escribir identificadores utilizando caracteres Unicode.

Las letras Java incluyen los caracteres ASCII A-Z y a-z. Los digitos Java incluyen los digitos ASCII 0-9. Para propósitos de construir identificadores, los caracteres ASCII $ y _ son también considerados letras Java.

No hay un límite en lo concerniente al número de caracteres que pueden tener los identificadores.

Estos son algunos ejemplos de identificadores válidos:
_varx      $var1      MAX_NUM     var2                 
    
Palabras clave

La siguiente tabla muestra las palabras claves de Java, éstas son reservadas y no pueden ser utilizadas como identificadores.
abstract
default
if
private
this
boolean
do
implements
protected
throw
break
double
import
public
throws
byte
else
instanceof
return
transient
case
extends
int
short
try
catch
final
interface
static
void
char
finally
long
strictfp**
volatile
class
float
native
super
while
const*
for
new
switch

continue
goto*
package
synchronized


* Son palabras claves de Java que no son usadas actualmente.
** Palabra clave agregada en Java 2

true, false, and null no son palabras claves pero son palabras reservadas, así que tampoco pueden ser utilizadas como identificadores.
Literales

Una literal es un valor constante formado por una secuencia de caracteres. Cualquier declaración en Java que defina un valor constante -un valor que no pueda ser cambiado durante la ejecución del programa- es una literal.

Son ejemplos de literales los números, los caracteres y las cadenas de caracteres.
  • Literales numéricas
    Se pueden crear literales numéricas a partir de cualquier tipo de dato primitivo.
  • Ej.
  • 123                        //literal int
  • 123.456                               //literal double
  • 123L                      //literal long
  • 123.456F             //literal float
  • Literales booleanas
    Las literales boolenas consisten de las palabras reservadas true y false.
  • Literales de caracteres
    Las literales de caracteres se expresan por un solo caracter entre comillas sencillas
Ej.           'a',          '%',         '7'
  • Literales de cadena
    Una cadena es una combinación de caracteres. Las cadenas en Java son instancias de la clase String, por ello cuentan con métodos que permiten combinar, probar y modificar cadenas con facilidad.
    Las literales de cadena se representan por una secuencia de caracteres entre comillas dobles.
Ej.   "hola",   "cadena123",   "12345"
Expresiones y Operadores.
 
  • Expresión
Una expresión es una combinación de variables, operadores y llamadas de métodos construida de acuerdo a la sintaxis del lenguaje que devuelve un valor.

El tipo de dato del valor regresado por una expresión depende de los elementos usados en la expresión.
  • Operadores
Los operadores son símbolos especiales que por lo común se utilizan en expresiones.
La tabla siguiente muestra los distintos tipos de operadores que utiliza Java.
Operador
Significado
Ejemplo
Operadores aritméticos

+
Suma
a + b
-
Resta
a - b
*
Multiplicación
a * b
/
División
a / b
%
Módulo
a % b
Operadores de asignación

=
Asignación
a = b
+=
Suma y asignación
a += b (a=a + b)
-=
Resta y asignación
a -= b (a=a - b)
*=
Multiplicación y asignación
a *= b (a=a * b)
/=
División y asignación
a / b (a=a / b)
%=
Módulo y asignación
a % b (a=a % b)
Operadores relacionales

==
Igualdad
a == b
!=
Distinto
a != b
Menor que
a < b
>
Mayor que
a > b
<=
Menor o igual que
a <= b
>=
Mayor o igual que
a >= b
Operadores especiales

++
Incremento
a++ (postincremento)
++a   (preincremento)
--
Decremento
a-- (postdecremento)
--a  (predecremento)
(tipo)expr
Cast
a = (int) b
+
Concatenación de cadenas
a = "cad1" + "cad2"
.
Acceso a variables y métodos
a = obj.var1
( )
Agrupación de expresiones
a = (a + b) * c

Bloques y sentencias 
 
  • Sentencia

    Una instrucción o sentencia representa la tarea más sencilla que se puede realizar en un programa.
  • Sentencias de expresión
Los siguientes tipos de expresiones pueden ser hechas dentro de una sentencia terminando la expresión con punto y coma (;):

* Expresiones de asignación
* Cualquier uso de los operadores ++ y --
* Llamada de métodos
* Expresiones de creación de objetos

Esta clase de sentencias son llamadas sentencias de expresión.
Ej.

valorA = 8933.234;           // asignación
valorA++;                    // incremento
System.out.println(valorA);  // llamada a un método
Integer objInt = new Integer(4); // creación de objetos
  • Sentencias de declaración de variables
Las sentencias de declaración de variables se utilizan para declarar variables.
Ej.

int  bValue;
double  aValue = 8933.234; 
String varCad;
  • Sentencias de control de flujo
Las sentencias de control de flujo determinan el orden en el cual serán ejecutadas otro grupo de sentencias. Las sentencias if y for son ejemplos de sentencias de control de flujo.
  • Bloque de sentencias
Un bloque es un grupo de cero o más sentencias encerradas entre llaves ( { y } ). Se puede poner un bloque de sentencias en cualquier lugar en donde se pueda poner una sentencia individual.
Las sentencias de control de flujo se pueden utilizar para ejecutar sentencias condicionalmente, para ejecutar de manera repetida un bloque de sentencias y en general para cambiar la secuencia normal de un programa.
  • La sentencia if

    La sentencia if permite llevar a cabo la ejecución condicional de sentencias.
  • if ( Expresion ){
  •    sentencias;
  • }
Se ejecutan las sentencias si al evaluar la expresión se obtiene un valor booleano true.
if ( Expresion ){
   sentenciasA;
}
else{
   sentenciasB;
}
Si al evaluar la expresión se obtiene un valor booleano true se ejecutarán las sentenciasA, en caso contrario se ejecutarán las sentenciasB.
La sentencia switch
Cuando se requiere comparar una variable con una serie de valores diferentes, puede utilizarse la sentencia switch, en la que se indican los posibles valores que puede tomar la variable y las sentencias que se tienen que ejecutar sí es que la variable coincide con alguno de dichos valores.
switch( variable ){
                case valor1:
                               sentencias;
                break;
                case valor2:
                               sentencias;
                break;

                               ...
                              
                case valorN:
                               sentencias;
                break;  
                default:
                               sentencias;
}
Cada case ejecutará las sentencias correspondientes, con base en el valor de la variable, que deberá de evaluarse con valores de tipo byte, char, short o int.

Si el valor de la variable no coincide con ningún valor, entonces se ejecutan las sentencias por default, sí es que las hay.

La sentencia break al final de cada case transfiere el control al final de la sentencia switch; de esta manera, cada vez que se ejecuta un case todos los enunciados case restantes son ignorados y termina la operación del switch
  • El ciclo for
El ciclo for repite una sentencia, o un bloque de sentencias, mientras una condición se cumpla. Se utiliza la mayoría de las veces cuando se desea repetir una sentencia un determinado número de veces.

La forma general de la sentencia for es la siguiente;
for(inicialización;condición;incremento){
   sentencias;
}
* En su forma más simple, la inicialización es una sentencia de asignación que se utiliza para establecer una variable que controle el ciclo.

* La condición es una expresión que comprueba la variable que controla el ciclo y determinar cuando salir del ciclo.

* El incremento define la manera en como cambia la variable que controla el ciclo.

Los ciclos while y do-while, al igual que los ciclos for repiten la ejecución de un bloque de sentencias mientras se cumpla una condición específica.
  • La sentencia while

    El formato de la sentencia while es la siguiente:
  • while (condición){
  •    sentencias;
  • }
La condición es una condición booleana, que mientras tenga el valor true permite que se ejecuten las sentencias correspondientes.
  • La sentencia do-while
Al contrario de los ciclos for y while que comprueban una condición en lo alto del ciclo, el ciclo do-while la examina en la parte más baja del mismo. Esta característica provoca que un ciclo do-while siempre se ejecute por lo menos una vez.

El formato de la sentencia do-while es el siguiente:
do{
   sentencias;
}while (condición);
  break
La sentencia break tiene dos usos. El primer uso es terminar un case en la sentencia switch. El segundo es forzar la terminación inmediata de un ciclo, saltando la prueba condicional normal del ciclo.
  continue
La sentencia continue es similar a la sentencia break. Sin embargo, en vez de forzar la terminación del ciclo, continue forza la siguiente iteración y salta cualquier código entre medias.
  return
Se utiliza la sentencia return para provocar la salida del método actual; es decir, return provocará que el programa vuelva al código que llamó al método.

La sentencia return puede regresar o no un valor. Para devolver un valor, se pone el valor después de la palabra clave return.
   return valor;
El tipo de dato del valor regresado debe ser el mismo que el que se especifica en la declaración del método.

Cuando un método es declarado void, el método no regresa ningún valor.
Sobrecarga de métodos y de constructores

La firma de un método es la combinación del tipo de dato que regresa, su nombre y su lista de argumentos.

La sobrecarga de métodos es la creación de varios métodos con el mismo nombre pero con diferentes firmas y definiciones. Java utiliza el número y tipo de argumentos para seleccionar cuál definición de método ejecutar.

Java diferencia los métodos sobrecargados con base en el número y tipo de argumentos que tiene el método y no por el tipo que devuelve.

Tambien existe la sobrecarga de constructores: Cuando en una clase existen constructores múltiples, se dice que hay sobrecarga de constructores.

Ejemplo

/* Métodos sobrecargados */
int calculaSuma(int x, int y, int z){
    ...
}
int calculaSuma(double x, double y, double z){
    ...
}

/* Error: estos métodos no están sobrecargados */
int calculaSuma(int x, int y, int z){
     ...
}
double calculaSuma(int x, int y, int z){
    ...
}

Ejemplo

/* Usuario4.java */

class Usuario4
{
     String nombre;
     int edad;
     String direccion;

     /* El constructor de la clase Usuario4 esta sobrecargado */
     Usuario4( )
     {
        nombre = null;
        edad = 0;
        direccion = null;
     }

     Usuario4(String nombre, int edad, String direccion)
     {
        this.nombre = nombre;
        this.edad = edad;
        this.direccion = direccion;
     }

     Usuario4(Usuario4 usr)
     {
        nombre = usr.getNombre();
        edad = usr.getEdad();
        direccion = usr.getDireccion();
     }

     void setNombre(String n)
     {
        nombre = n;
     }

     String getNombre()
     {
        return nombre;
     }

     /* El metodo setEdad() está sobrecargado */
     void setEdad(int e)
     {
        edad = e;
     }

     void setEdad(float e)
     {
        edad = (int)e;
     }

     int getEdad()
     {
        return edad;
     }

     void setDireccion(String d)
     {
        direccion = d;
     }

     String getDireccion()
     {
        return direccion;
     }
}

Ejemplo

/* ProgUsuario4.java */

class ProgUsuario4
{
   void imprimeUsuario(Usuario4 usr)
   {
     //   usr.nombre equivale en este caso a usr.getNombre()
     System.out.println("\nNombre: " + usr.nombre );
     System.out.println("Edad: " + usr.getEdad() );
     System.out.println("Direccion: " + usr.getDireccion() +"\n");
   }

   public static void main(String args[])
   {
      ProgUsuario4 prog = new ProgUsuario4( );
      /* Se declaran dos objetos de la clase Usuario4 */
      Usuario4 usr1,usr2;

      /* Se utiliza el constructor por omisión */
      usr1 = new Usuario4( );
      prog.imprimeUsuario(usr1);

     /* Se utiliza el segundo constructor de Usuario4 */
      usr2 = new Usuario4("Eduardo",24,"Mi direccion");
      prog.imprimeUsuario(usr2);

     /* Se utiliza el tercer constructor de Usuario4 */
      usr1 = new Usuario4(usr2);

      usr1.setEdad(50);
      usr2.setEdad(30.45f);

      prog.imprimeUsuario(usr1);
      prog.imprimeUsuario(usr2);
   }
}


Sobreescritura de métodos

Una subclase hereda todos los métodos de su superclase que son accesibles a dicha subclase a menos que la subclase sobreescriba los métodos.

Una subclase sobreescribe un método de su superclase cuando define un método con las mismas características ( nombre, número y tipo de argumentos) que el método de la superclase.

Las subclases emplean la sobreescritura de métodos la mayoría de las veces para agregar o modificar la funcionalidad del método heredado de la clase padre.
Ejemplo

class ClaseA
{
   void miMetodo(int var1, int var2)
   { ... }

   String miOtroMetodo( )
   { ... }
}

class ClaseB extends ClaseA
{
   /* Estos métodos sobreescriben a los métodos
   de la clase padre */

   void miMetodo (int var1 ,int var2)
   { ... }

   String miOtroMetodo( )
   { ... }
}






miércoles, 6 de mayo de 2015

  Tipos de objetos en java (Componedores graficos)
 
Que son Los Componentes Graficos?
Como se ha mencionado, los componentes graficos son estos elementos que permiten brindar una interacción con el usuario del sistema..... Cada componente corresponde a una clase en Java, por esta razón cuando desarrollamos y queremos vincular uno de estos elementos simplemente instanciamos la clase que necesitamos, es decir, si queremos un Área de texto debemos crear un objeto de la clase JTextArea....

Categorias

En la introducción sobre Swing vimos un pequeño árbol de herencia, sin embargo este no enmarca todos los componentes Graficos de la librería sino solo algunos de los principales, a continuación vamos a ampliar el numero de esos componentes agrupándolos en categorías dependiendo de su funcionalidad....
No vamos a profundizar en cada categoría, tan solo es una introducción general, en próximas entradas se trataran mas a fondo....
Contenedores

Como vimos en entradas anteriores, un contenedor es el tapiz donde pintaremos nuestros componentes graficos, existen contenedores principales, entre estos se encuentran JFrame y JDialog pero también existen otros contendedores incluidos dentro de los mencionados...
  • JFrame – Es la Ventana de aplicación, el contenedor principal
  • JDialog – Una ventana de tipo Ventana de diálogo, tambien puede ser un contenedor principal.
  • JPanel – Permite la creación de paneles independientes donde se almacenan otros componentes.
  • JScrollPane – permite la vinculación de barras de desplazamiento en un contenedor.
  • JSplitPane – permite la creación de un contenedor dividido en 2 secciones.
  • JTabbedPane – Permite la creación de pestañas, cada pestaña representa un contenedor independiente.
  • JDesktopPane – Permite crear ventanas dentro de una ventana principal 
  • JToolBar – Permite introducir una Barra de herramientas 
Componentes atomicos
 
Los componentes atómicos son los elementos que no pueden almacenar otros objetos o componentes graficos, por ejemplo, un JPanel no es Atómico, ya que en el podemos almacenar JButtons, JTextField entre otros...
  • JLabel – Permite Vincular Etiquetas, tanto de texto como de imagenes
  • JButton – Permite vincular Botones simples. 
  • JCheckBox – Son Casilla de verificación, ideal para selección múltiples.
  • JRadioButton – Permite presentar opciones de selección similares a las checkbox, solo que el enfoque de estas es de única selección.
  • JToggleButton – Botón que al oprimirlo se quedará presionado hasta que se ejecute otro evento.
  • JComboBox – Permite mostrar una lista de elementos como un combo de selección.
  • JScrollBar – Permite mostrar una barra de desplazamiento, regularmente usada en Areas de texto o paneles donde el contenido es mayor que el tamaño del componente. 
  • JSeparator – Permite separar opciones, es una barra simple. 
  • JSlider - Permite vincular un Deslizador en nuestra ventana. 
  • JSpinner – permite vincular una caja de texto con botones integrados para seleccionar algún valor. 
  • JProgressBar – Establece una barra de progreso.

Componentes de textos

Son todos aquellos que nos permiten procesar cadenas de texto, sea como entrada o salida de información.
  • JTextField – Permite introducir un campo de texto simple.
  • JFormattedTextField – Permite introducir un campo de texto con formato, (si definimos que solo recibe números no permitirá letras...)
  • JPasswordField – Campo de texto que oculta los caracteres ingresados.
  • JTextArea – Permite vincular un área de texto donde el usuario ingresara información o simplemente para presentar cadenas de texto.
  • JEditorPane Permite vincular un área de texto con propiedades de formato.
  • JTextPane – Similar al anterior, permitiendo otras opciones de formato, colores, iconos entre otros.

Componentes de menus

Estos componentes permiten vincular opciones de menú en nuestras ventanas, tipo menú principal, como por ejemplo el conocido Inicio, Archivo, Edición etc..
  • JMenuBar – Permite vincular una barra de menús.
  • JMenu– Permite vincular botones o enlaces que al ser pulsados despliegan un menú principal.
  • JMenuItem – Botón u opción que se encuentra en un menú.
  • JCheckBoxMenuItem– Elemento del menú como opciones de checkbox.
  • JRadioButtonMenuItem– Elemento del menú como botón de selección.
  • JPopupMenu– Opciones de menú emergentes.

Componentes Complejos

Estos son componentes un poco mas avanzados, cumplen con funciones mas enfocadas a procesos especificos y complejos, como por ejemplo obtener gran cantidad de información de una base de datos, trabajo con nodos, colores entre otros.
  • JTABLE– Permite vincular una tabla de datos con sus respectivas filas y columnas.
  • JTree- Carga un árbol donde se establece cierta jerarquía visual, tipo directorio.
  • JList – Permite cargar una lista de elementos, dependiendo de las propiedades puede tenerse una lista de selección múltiple.
  • JFileChooser– Es un componente que permite la búsqueda y selección de ficheros entre otras.
  • JColorChooser– Componente que permite cargar un panel selector de color
  • JOptionPane – No es algo complejo sino mas un componente independiente que permite mostrar un cuadro de diálogo personalizable.

Conclusiones.
Como vimos existen gran cantidad de componentes pensados para diferentes problemas o necesidades, los presentados son los mas comunes aunque también pueden existir otros que tal vez no se mencionan aquí pero pueden ser mencionados mas adelante.
La intención con esta entrada es servir como base para nuevos artículos donde se crearan ejemplos un poco generales y otros al detalle de cada componente, mientras tanto puede dar una idea de los tipos de componentes que tal vez necesitan utilizar, así tan solo es cuestión de buscar el nombre y encontrar ejemplos de aplicación.

miércoles, 29 de abril de 2015



Empaquetado de objetos
El lenguaje Java le permite elegir los nombres de sus objetos, tales como Account, Person o LizardMan. En ocasiones, puede que termine usando el mismo nombre para expresar dos conceptos ligeramente diferentes. Esto se llama una colisión de nombres y sucede con frecuencia. El lenguaje Java usa paquetes para resolver estos conflictos.
Un paquete Java es un mecanismo para proporcionar un espacio de nombres: un área encapsulada en donde los nombres son únicos pero, fuera de esa área, puede que no lo sean. Para identificar una construcción de manera única, debe calificarla totalmente al incluir su espacio de nombres.
Los paquetes también le dan una buena forma para construir aplicaciones más complejas en unidades diferenciadas de funcionalidad.
Definición de paquete
Para definir un paquete, use la palabra clave paquete seguida por un nombre de paquete legal y termina con un punto y coma. A menudo, los nombres de los paquetes se separan con puntos y siguen este plan de facto:
package orgType.orgName.appName.compName;
Esta definición de paquete se divide de la siguiente manera:
  • orgType es el tipo de organización, tales como com, org o net.
  • orgName es el nombre del ámbito de la organización, tales como makotogroup, sun o ibm.
  • appName es el nombre de la aplicación, abreviado.
  • compName es el nombre del componente.
El lenguaje Java no lo obliga a seguir este convenio de paquetes.
Sentencias de importación
Una sentencia de importación le comunica al compilador Java dónde encontrar las clases a las que usted hace referencia dentro de su código. Cualquier objeto no trivial usa otros objetos para alguna funcionalidad y la sentencia de importación es cómo usted le comunica al compilador Java sobre ellos.
Una sentencia de importación normalmente luce así:
import ClassNameToImport;
Especificando la palabra clave importación seguida de la clase que quiere importar seguida de un punto y coma. El nombre de la clase debería estar completamente calificado, es decir, debería incluir su paquete.
Para importar todas las clases dentro de un paquete, puede poner .* después del nombre del paquete. Por ejemplo, esta sentencia importa cada clase en el paquete com.makotogroup:
import com.makotogroup.*;
Sin embargo, importar todo un paquete puede hacer que su código sea menos legible, por lo tanto recomiendo que importe solo las clases que necesite.
Convenios de denominación de clases
Se puede denominar a las clases prácticamente como quiera pero el convenio es usar bicapitalización: comenzar con una letra en mayúscula, usar mayúscula en la primera letra de cada palabra concatenada y dejar todas las otras letras en minúscula. Los nombres de las clases deberían contener solo letras y números. Adherirse a estas guías asegurará que su código sea más accesible para otros desarrolladores que siguen los mismos convenios.
Las clases pueden tener dos tipos de miembros: variables y métodos.
Listado 3. Sintaxis de la declaración del constructor
accessSpecifier ClassName([argumentList]) {
  constructorStatement(s)
}
Los constructores son opcionales
Los constructores le permiten especificar cómo crear una instancia de una clase.
Si usted no proporciona un constructor, el compilador proporcionará uno por usted, denominado el constructor predeterminado (o sin argumento). Si usted proporciona un constructor que no sea un constructor sin argumento (o no-arg), el compilador no generará uno por usted.
El accessSpecifier de un constructor es el mismo que el de las variables. El nombre del constructor debe coincidir con el nombre de la clase. Por lo tanto, si llama a su clase Person, entonces el nombre del constructor también debe ser Person.
Para cualquier constructor que no sea el constructor predeterminado, usted pasa una argumentList, que es una o más de:
argumentType argumentName
Los argumentos en una argumentList se separan con comas y dos argumentos no pueden tener el mismo nombre. El argumentType es un tipo primitivo u otro tipo de clase (lo mismo que sucede con los tipos de variables).
Los constructores son opcionales
Si usted no proporciona un constructor, el compilador proporcionará uno por usted, denominado el constructor predeterminado (o sin argumento). Si usted proporciona un constructor que no sea un constructor sin argumento (o no-arg), el compilador no generará uno por usted.
Métodos estáticos y de instancia
Hay generalmente dos tipos de métodos (no constructores): los métodos de instancia y los métodos estáticos. Los métodos de instancia dependen del estado de una instancia de objeto específico por sus comportamientos. Los métodos estáticos también se denominan a veces métodos de clase porque sus comportamientos no dependen del estado de ningún objeto en particular. El comportamiento de un método estático sucede al nivel de la clase.
Los métodos estáticos se usan en gran medida por utilidad; puede considerarlos como un modo de tener métodos globales (à la C) mientras mantiene el código mismo agrupado con la clase que lo necesita.
Por ejemplo, en todo este tutorial usará la clase de Logger JDK para enviar información a la consola. Para crear una instancia de clase de Logger, no cree una instancia de clase de Logger; en cambio, invoque un método estático llamado getLogger().
La sintaxis para invocar un método estático es diferente de la sintaxis usada para invocar un método para una instancia de objeto. También use el nombre de la clase que contiene el método estático, como se muestra en esta invocación:
Logger l = Logger.getLogger("NewLogger");
Por lo cual, para invocar un método estático, no necesita una instancia de objeto, solo el nombre de la clase.
Registro incorporado
Antes de avanzar más en la codificación, necesita saber cómo sus programas le dicen lo que están haciendo.
La plataforma Java incluye el paquete java.util.logging, un mecanismo de registro incorporado para juntar información de programa en una forma legible. Los registradores son entidades con nombres que usted crea por medio de una llamada de método estático a la clase Logger, como la siguiente:
import java.util.logging.Logger;

Miembro de una clase
Las variables y los métodos que usted tiene en Person y Employee son variables y métodos de instancia. Para usarlos, usted debe crear instancias de la clase que necesita o tener una referencia a la instancia. Cada instancia de objetos tiene variables y métodos y, para cada uno, el comportamiento exacto (por ejemplo, lo que se genera al llamar a printAudit()) será diferente porque se basa en el estado de la instancia de los objetos.
Las clases mismas también pueden tener variables y métodos, que se llaman miembros de clases. Usted declara miembros de clases con la palabra clave static. Las diferencias entre los miembros de clases y los miembros de instancias son las siguientes:
  • Cada instancia de una clase comparte una sola copia de una variable de clase.
  • Puede llamar a los métodos de clases en la clase misma, sin tener una instancia.
  • Los métodos de instancias pueden acceder a las variables de clases pero los métodos de clases no pueden acceder a variables de instancias.
  • Los métodos de clases pueden acceder solo a las variables de clases.

Ámbito referente a una clase

Una clase actúa como cualquier otro tipo de dato con respecto al ámbito. Todos los miembros de una clase se dice que están en el ámbito de esa clase; cualquier miembro de una clase puede referenciar a cualquier otro miembro de la misma clase.
Las funciones miembro de una clase tienen acceso no restringido a los miembros dato de esa clase. El acceso a los miembros dato y funciones de una clase fuera del ámbito de la clase está controlado por el programador. La idea es encapsular la estructura de datos y funcionalidad de una clase, de modo que el acceso a la estructura de datos de la clase desde fuera de las funciones miembro de la clase, sea limitada o innecesaria.
El nombre de la clase tiene que ser único dentro de su ámbito.Especificadores de acceso a los miembros de una clase
En una definición de clase, un especificador de acceso se utiliza para controlar la visibilidad de los miembros de una clase fuera del ámbito de la clase.
Los miembros de una clase pueden ser públicos, privados o protegidos. Las palabras reservadas public, private y protected se utilizan para controlar el modo de acceso a la clase.
Dentro de una declaración de clase, cada una de estas palabras se puede utilizar para preceder a una o más declaraciones de los miembros de una clase:- Acceso protegido.
Los miembros protegidos significan que sólo se puede acceder a ellos por funciones miembro dentro de la misma clase y por funciones miembro de clases derivadas de esta clase.- Acceso público. Los miembros públicos son accesibles por cualquier parte del programa.- Acceso privado. Los miembros privados sólo pueden ser utilizados por las funciones miembro de la clase y las funciones amigas de la clase.
Funciones miembro Son miembros de una clase y son funciones diseñadas para implementar las operaciones permitidas sobre los tipos de datos de una clase. Para declarar una función miembro hay que situar su prototipo en el cuerpo de la clase. No hay que definir la función dentro de la clase; dicha definición puede estar fuera de la clase e incluso en un archivo independiente, aunque también pueden ser definidas en línea dentro de la clase.
Las funciones miembro son necesarias para acceder a los datos privados. En general, son públicas; si no lo fueran, ninguna otra función podría llamarlas. Se pueden declarar para devolver valores con tipos incluyendo objetos de clases, punteros o referencias. Pueden ser declaradas también para aceptar cualquier número y tipo de argumentos. Los argumentos por defecto están permitidos, así como la notación de puntos suspensivos.

ESPECIFICADORES DE ACCESO


C++ introduce tres nuevas palabras clave para establecer las fronteras de una estructura: public, private y protected. Su uso y significado es bastante claro. Los especificadores de acceso se usan solo en la declaración de las estructuras, y cambian las fronteras para todas las declaraciones que los siguen. Cuando use un especificador de acceso, debe ir seguido de “:” .
CREACION DE OBJETOS

Para disponer de espacio en la memoria para guardar la información de uno de esos alumnos tendremos que crear un objeto con el patrón (clase) alumno. Los objetos se crean con la palabra reservada new.
En la siguiente instrucción:
uno = new alumno();
Creamos un objeto de la clase alumno que referenciamos con la variable uno

La variable tendrá que haberse declarado antes, y la declaramos como una variable del tipo alumno, ya que la vamos a usar para guardar información de objetos del tipo alumno.
Un programa con la declaración de la variable y la creación del objeto sería:
public class p2t1p5{
public static void main(String[] args){
alumno uno; // 1
uno = new alumno(); // 2
uno.nombre = "Joan"; // 3
uno.apellido = "Rosell Mas"; // 4
System.out.println(uno.nombre + " " + uno.apellido);
}
}
Constructores y destructores
Constructores
Los constructores son unos métodos especiales que se ejecutan automáticamente al crear un objeto de la clase. En su declaración no se especifica el tipo de dato que devuelven, y poseen el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, puede haber varios constructores sobrecargados, aunque no pueden existir constructores virtuales.
Como característica especial a la hora de implementar un constructor, justo después de la declaración de los parámetros, se encuentra lo que se llama "lista de inicializadores". Su objetivo es llamar a los constructores de los atributos que conforman el objeto a construir.
Cabe destacar que no es necesario declarar un constructor al igual que un destructor, pues el compilador lo puede hacer, aunque no es la mejor forma de programar.Tomando el ejemplo de la Clase Punto, si deseamos que cada vez que se cree un objeto de esta clase las coordenadas del punto sean igual a cero podemos agregar un constructor.
Existen varios tipos de constructores en C++:
Constructor predeterminado: Es el constructor que no recibe ningún parámetro en la función. Si no se definiera ningún constructor, el sistema proporcionaría uno predeterminado. Es necesario para la construcción de estructuras y contenedores de la STL.
Constructor de copia: Es un constructor que recibe un objeto de la misma clase, y realiza una copia de los atributos del mismo. Al igual que el predeterminado, si no se define, el sistema proporciona uno.
Constructor de conversión: Este constructor, recibe como único parámetro, un objeto o variable de otro tipo distinto al suyo propio. Es decir, convierte un objeto de un tipo determinado a otro objeto del tipo que estamos generando.
Destructores
Los destructores son funciones miembro especiales llamadas automáticamente en la ejecución del programa, y por tanto no tienen por qué ser llamadas explícitamente por el programador. Su cometido es liberar los recursos computacionales que el objeto de dicha clase haya adquirido en tiempo de ejecución al expirar este.
Los destructores son invocados automáticamente al alcanzar el flujo del programa el fin del ámbito en el que está declarado el objeto.
Existen dos tipos de destructores pueden ser públicos o privados, según si se declaran:
si es público se llama desde cualquier parte del programa para destruir el objeto.
si es privado no se permite la destrucción del objeto por el usuario.
El destructor es muy similar al constructor, excepto que es llamado automáticamente cuando cada objeto sale de su ámbito de validez. Recordemos que las variables automáticas tienen un tiempo de vida limitado, ya que dejan de existir cuando se sale del bloque en que han sido declaradas.
Cuando un objeto es liberado automáticamente, su destructor, si existe, es llamado automáticamente.Un destructor tiene el mismo nombre que la clase a la que pertenece, pero precedido con una tilde (~). Igual que el constructor, un destructor no devuelve nada.
Si algún bloque de memoria fue reservado dinámicamente en un objeto, se puede utilizar el destructor para liberarlo antes de que se pierdan los punteros a esas variables.

Clases predefinidas
Uno de los puntos fuertes de Java es la gran cantidad de clases predefinidas que aporta. Abarcan temas como comunicaciones, web, diseño gráfico, utilidades matemáticas, contenedores genéricos y muchas más.
Para utilizar algunas de ellas es necesario importar el paquete en el que se encuentran, indicándolo con la sentencia import seguida del nombre del paquete y de la clase a importar
import paquete.clase;
import paquete.*;       //importa todas las clases de ese paquete
Desde NetBeans se dispone, en el menú contextual del código fuente, de la opción "Reparar importaciones" que detecta automáticamente los "import" que son necesarios.
Reutilización de paquetes y librerías
En Java y en varios lenguajes de programación más, existe el concepto de librerías. Una librería en Java se puede entender como un conjunto de clases, que poseen una serie de métodos y atributos. Lo realmente interesante de estas librerías para Java es que facilitan muchas operaciones. De una forma más completa, las librerías en Java nos permiten reutilizar código, es decir que podemos hacer uso de los métodos, clases y atributos que componen la librería evitando así tener que implementar nosotros mismos esas funcionalidades.

Manejo de excepciones
El manejo de excepciones es una técnica de programacion que permite al programador controlar los errores ocasionados durante la ejecución de un programa informático. Cuando ocurre cierto tipo de error, el sistema reacciona ejecutando un fragmento de código que resuelve la situación, por ejemplo retornando un mensaje de error o devolviendo un valor por defecto.