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