viernes, 5 de junio de 2015

Ciclo de Vida de un Sistema.

El método de ciclo de vida para el desarrollo de sistemas es el conjunto de actividades que los analistas, diseñadores y usuarios realizan para desarrollar e implantar un sistema de información. El método del ciclo de vida para el desarrollo de sistemas consta de 6 fases:
1). Investigación Preliminar: La solicitud para recibir ayuda de un sistema de información puede originarse por varias razones: sin importar cuales sean estas, el proceso se inicia siempre con la petición de una persona.
2). Determinación de los requerimientos del sistema: El aspecto fundamental del análisis de sistemas es comprender todas las facetas importantes de la parte de la empresa que se encuentra bajo estudio. Los analistas, al trabajar con los empleados y administradores
3). Diseño del sistema: El diseño de un sistema de información produce los detalles que establecen la forma en la que el sistema cumplirá con los requerimientos identificados durante la fase de análisis. Los especialistas en sistemas se refieren, con frecuencia, a esta etapa como diseño lógico en contraste con la del desarrollo del software, a la que denominan diseño físico.
4). Desarrollo del software: Los encargados de desarrollar software pueden instalar software comprobando a terceros o escribirprogramas diseñados a la medida del solicitante.La elección depende del costo de cada alternativa, del tiempo disponible para escribir el software y de la disponibilidad de los programadores. Por lo general, los programadores que trabajan en las grandes organizaciones pertenecen a un grupo permanente de profesionales.
5). Prueba de sistemas: Durante la prueba de sistemas, el sistema se emplea de manera experimental para asegurarse de que el software no tenga fallas, es decir, que funciona de acuerdo con las especificaciones y en la forma en que los usuarios esperan que lo haga. Se alimentan como entradas conjunto de datos de prueba para su procesamiento y después se examinan los resultados.
6). Implantación y evaluación: La implantación es el proceso de verificar e instalar nuevo equipo, entrenar a los usuarios, instalar la aplicación y construir todos los archivos de datos necesarios para utilizarla. Una vez instaladas, las aplicaciones se emplean durante muchos años. Sin embargo, las organizaciones y los usuarios cambian con el paso del tiempo, incluso el ambiente es diferente con el paso de las semanas y los meses.
Por consiguiente, es indudable que debe darse mantenimiento a las aplicaciones. La evaluación de un sistema se lleva a cabo para identificar puntos débiles y fuertes. La evaluación ocurre a lo largo de cualquiera de las siguientes dimensiones:- Evaluación operacional: Valoración de la forma en que funciona el sistema, incluyendo su facilidad de uso, tiempo de respuesta, lo adecuado de los formatos de información, confiabilidad global y nivel de utilización.
- Impacto organizacional: Identificación y medición de los beneficios para la organización en áreas tales como finanzas, eficiencia operacional e impacto competitivo. También se incluye el impacto sobre el flujo de información externo e interno.
- Opinión de loa administradores: evaluación de las actividades de directivos y administradores dentro de la organización así como de los usuarios finales.
- Desempeño del desarrollo: La evaluación de proceso de desarrollo de acuerdo con criterios tales como tiempo y esfuerzo de desarrollo, concuerdan con presupuestos y estándares, y otros criterios deadministración de proyectos. También se incluye la valoración de los métodos y herramientas utilizados en el desarrollo. 

Definiciones.

Comentarios en Java

Un comentario es un texto que se escribe dentro de un programa con el fin de facilitar la comprensión del mismo. 
Los comentarios se utilizan para explicar y documentar el código fuente. 
En Java se pueden utilizar tres tipos de comentarios:

Comentario tradicional estilo C/C++.

Empieza con los caracteres /* y acaba con */.
Pueden ocupar más de una línea y pueden aparecer en cualquier lugar donde pueda aparear un espacio en blanco. 
No pueden anidarse.

Ejemplos de comentarios estilo C/C++:

/* Programa Ecuación segundo grado
    Calcula las soluciones de una ecuación de segundo grado */

/* Lectura de datos por teclado */

Comentarios de una sola línea.

Comienzan con una doble barra ( // ) y se pueden extender hasta el final de la línea. 
No tienen carácter de terminación.

Ejemplos de comentarios de una sola línea:

// Programa Ecuación segundo grado

// Calcula las soluciones de una ecuación de segundo grado

int p; // precio del producto

Comentarios de documentación Javadoc.

Son comentarios especiales para generar documentación del programa.

Comienza con /** y termina con */

Ejemplo de comentario de documentación Javadoc:

/**
 *
 * @author Enrique
 * @version 1.0
 *
 */

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. 




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. 









Sentencia.

Una instrucción o sentencia representa la tarea más sencilla que se puede realizar en un programa.

Sobrecarga de Metodos.


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){ ..

.}


Sobreescritura de Metodos.

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( )
   { ... }
}

Futuro de lenguaje POO.

El futuro de la programación orientada a objetos probablemente se encuentra con lenguajes como Ruby y Lua, en el que se construye el concepto de objeto en el lenguaje y no siempre es explícitamente controlado por el programador. Ruby, por ejemplo, trata todo como un objeto, incluidas cadenas, números, tu programa y los contenidos del directorio en el que estás actualmente. Casi nunca tendrás que declarar algo como un objeto. Eres libre de utilizar el lenguaje como quieras: como programación orientada a objetos, como un lenguaje funcional, como lenguaje de procedimiento o incluso en formas que mezclan las modalidades.

Clases.

MIEMBROS DE UNA CLASE: ATRIBUTOS Y MÉTODOS

ATRIBUTOS
Una clase puede tener cero o más atributos.
Sirven para almacenar los datos de los objetos. En el ejemplo anterior almacenan el nombre y la edad de cada objeto Persona.
Se declaran generalmente al principio de la clase.
La declaración es similar a la declaración de una variable local en un método.
La declaración contiene un modificador de acceso de los vistos anteriormente: private, package, protected, public.
Pueden ser variables de tipo primitivo o referencias a objetos.
En la clase Persona se ha declarado edad de tipo primitivo y nombre String. Ambas private y por lo tanto solo accesibles desde los métodos de la propia clase.
private String nombre;
private int edad;
Los atributos toman el valor inicial por defecto:
-               0 para tipos numéricos
-               '\0' para el tipo char
-               null para String y resto de referencias a objetos.

También se les puede asignar un valor inicial en la declaración aunque lo normal es hacerlo en el constructor.
El valor de los atributos en cada momento determina el estado del objeto.
Podemos distinguir dos tipos de atributos o variables:
·           Atributos de instancia: son todos los atributos no static. Cada objeto de la clase tiene sus propios valores para estas variables, es decir, cada objeto que se crea incluirá su propia copia de los atributos con sus propios valores.
·           Atributos de clase: son los declarados static. También se llaman atributos estáticos. Un atributo de clase no es específico de cada objeto. Solo hay una copia del mismo y su valor es compartido por todos los objetos de la clase. Un atributo de clase existe y puede utilizarse aunque no existan objetos de la clase. Podemos considerarlo como una variable global a la que tienen acceso todos los objetos de la clase.
Para acceder a un atributo de clase se escibe:
NombreClase.Atributo;
Por ejemplo, en la clase Persona podemos añadir un atributo contadorPersonas que indique cuantos objetos de la clase se han creado. Sería un atributo de clase ya que no es un valor propio de cada persona:
static int contadorPersonas;
Cada vez que se crea una persona podemos incrementar su valor:
Personas.contadorPersonas++;
Si lo declaramos además como private:
private static int contadorPersonas
solo podremos acceder al atributo a través de un método.
MÉTODOS
Una clase puede contener cero o más métodos.
Definen el comportamiento de los objetos de la clase.
A través de los métodos se accede a los datos de la clase.
Desde el punto de vista de la POO el conjunto de métodos de la clase se corresponden con el conjunto de mensajes a los que los objetos de esa clase pueden responder.
Al conjunto de métodos de una clase se le llama interfaz de la clase.
Es conveniente que todas las clases implementen los métodos de acceso ó setters/getters para cada atributo.
Los métodos pueden clasificarse en:
·           Métodos de instancia: Son todos los métodos no static. Operan sobre las variables de instancia de los objetos pero también tienen acceso a los atributos estáticos.
La sintaxis de llamada a un método de instancia es:
idObjeto.metodo(parametros); // Llamada típica a un método de instancia
Todas las instancias de una clase comparten la misma implementación para un método de instancia.
Dentro de un método de instancia, el identificador de una variable de instancia hace referencia al atributo de la instancia concreta que hace la llamada al método (suponiendo que el identificador del atributo no ha sido ocultado en el método).
·           Métodos de clase: Son los métodos declarados como static. Tienen acceso solo a los atributos estáticos de la clase. No es necesario instanciar un objeto para poder utilizar un método estático.
Para acceder a un método de clase se escibe:
NombreClase.metodo;
Por ejemplo para la clase Fecha podemos escribir un método estático que incremente el contador de personas:
public static void incrementarContador(){
        contadorPersonas++;
}
Para invocar a este método:
Persona.incrementarContador();

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

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.

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.

Definiciones.

Paquete.

Un paquete es un espacio de nombre que organiza un conjunto de clases e interfaces relacionadas. Puede pensar en los paquetes como algo similar a las diferentes carpetas de su ordenador. Puede tener guardadas páginas HTML en una carpeta, imágenes en otra y scripts y aplicaciones en otra distinta. Puesto que un software escrito en el lenguaje de programación Java puede llegar a consistir de cientos o miles de clases individuales, tiene sentido que se organicen las clases e interfaces relacionadas en 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;
import com.makotogroup.*;
Especifique 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:

Convenios de Denominación.

La palabra objetoa menudo se usa como sinónimo de la palabra clase. En sentido estricto, una clase define la estructura de algo de lo cual el objeto es una instancia.
El Listado 1 incluye esta declaración de clase:
accessSpecifier class ClassName {
  accessSpecifier dataType variableName [= initialValue];
  accessSpecifier ClassName([argumentList]) {
    constructorStatement(s)
  }
  accessSpecifier returnType methodName([argumentList]) {
    methodStatement(s)
  }
}
Un accessSpecifier de una clase podría tener varios valores pero, por lo general, es público. Observará otros valores deaccessSpecifier pronto.

Convenios de denominación de clases

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.

Métodos Constructores.

Los constructores le permiten especificar cómo crear una instancia de una clase. 

accessSpecifier ClassName([argumentList]) {
  constructorStatement(s)
}

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


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 claseporque 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 deLogger, 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. 
Adición de Variables de Clase.
Ahora formalmente definiré cómo agregar variables de clases.
Recuerde que una variable tiene un accessSpecifier, un dataType, un variableName y, opcionalmente, un initialValue. Anteriormente, observó brevemente cómo definir el accessSpecifier y variableName. Ahora verá el dataType que una variable puede tener.
Un dataType puede ser un tipo primitivo o una referencia a otro objeto. Por ejemplo, observe que Age es un int (un tipo primitivo) y Name es una String (un objeto). El JDK viene empaquetado lleno de clases útiles como java.lang.String y aquellos en el paquete java.lang no necesitan ser importados (una cortesía taquigráfica del compilador Java). Pero ya sea que el dataType sea una clase JDK como String o una clase definida por el usuario, la sintaxis es esencialmente la misma.
La Tabla 1 muestra los ocho tipos de datos primitivos que es probable que usted vea regularmente, incluidos los valores predeterminados que los primitivos adquieren si usted no inicializa explícitamente el valor de una variable miembro:
Tabla 1. Tipos de datos primitivos
TipoTamañoValor predeterminadoRango de valores
booleanon/dfalsoverdadero o falso
byte8 bits0-128 a 127
caract.16 bits(sin firmar)\u0000' \u0000' a \uffff' o 0 a 65535
corto16 bits0-32768 a 32767
int32 bits0-2147483648 a 2147483647
largo64 bits0-9223372036854775808 a 9223372036854775807
flotante32 bits0,01.17549435e-38 a 3.4028235e+38
doble64 bits0,04.9e-324 a 1.7976931348623157e+308

Registro Incorporado.

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;
//. . .
Logger l = Logger.getLogger(getClass().getName());
Cuando se llama al método getLogger(), usted pase una String. Por ahora, solo acostúmbrese a pasar al nombre de la clase el código en el que su escritura se encuentra. Desde cualquier método regular (es decir, no estático), el código anterior siempre hará referencia al nombre de la clase y lo pasará al Logger.
Si usted está haciendo una llamada de Logger dentro de un método estático, solo haga referencia al nombre de la clase en la que se encuentre:
Logger l = Logger.getLogger(Person.class.getName());