viernes, 27 de septiembre de 2013

terminología constructor

El construtor es un tipo especifico de metodo que siempre tiene el mismo nombre que la clase y se utiliza para construir objetos de esa clase. no tiene tipo de dato especifico de retorno, ni siquiera void. esto se debe a que el tipo especifico que debe devolver un constructor de calse el el propio tipo de clase.
Un constructor se invoca automaticamente cuando new crea un objeto de esa clase.
para definir los construtores se emplea la siguiente sintaxis
[modifvisibilidad] nombreconstructor (lista de parametros) {}
Existen 3 tipos de constructores: -> construtor por defecto: si no se define ningun constructor de una clase, el compilador genera un constructor por defecto. el constructor por defecto no tiene argumentos y simplemente situa ceros en cada byte de la variables instancia de un objeto.
-> copia: el constructor de copia se utiliza para inicializar un objeto con otro objeto de la misma clase.
-> comun: el constructor comun es aquel que recibe parametros para asignarles como valores iniciales a los datos miembros, o sea que al crear la instancia, se paso unos parametros para inicializarla
-> DESTRUCTOR un destructor es un metodo cuyo objetivo es el de eliminar toda la memoria que ocupo un objeto.
existen dos tipos de destructores: -> si es publico se llama desde cualquier parte del programa para destruir el objeto
-> si es privado no se permite la destruccion del objeto por el usuario.
METODO CONSTRUTOR: El objetivo del metodo constructor es declarar o inicializar los atributos dentro del objeto que estamos trabajando.
Ventajas al usar el metodo constructor: - El constructor es el primer metodo al crear un objeto -No necesitas llamar al metodo constructor. El se llama automaticamente al comenzar el objeto
Caracteristicas: - El llamarse automaticamente y no puede ser llamada 'manualmente' -No retorna datos -Puede recibir parametros que comunmente necesitamos declarar para iniciar atributos -Es opcional
INSTANCIA Diseño una clase que tiene varias variables (digamos altura y anchura por ejemplo de un objeto)y si invoco la clase, se instancia(digamos que se crea la altura y anchura de un objeto.¿o no?) y al instanciar se carga en memoria.
METODOS
-> de instancia para crear e inicializar instancias de una clase. -> privado un tipo especial de contructor de instancia que no es accesible desde fuera de la clase. Una clase con un construtor privado no puede ser instanciada (no se puede crear objetos de esa clase) -> estatico invocado automaticamente para inicializar la clase de que sea creada la primera instancia o que sea referenciado cualquier campo estatico. el construtor no puede ser invocado directamente.

viernes, 20 de septiembre de 2013

Introducción terminología de POO (Programación Orientada a Objetos).

Herencia: La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase, que luego se aplican a los atributos y métodos heredados. 

Polimorfismo :
La palabra polimorfismo proviene del griego y significa que posee varias formas diferentes. Este es uno de los conceptos esenciales de una programación orientada a objetos. Así como la herencia está relacionada con las clases y su jerarquía, el polimorfismo se relaciona con los métodos.
En general, hay tres tipos de polimorfismo:
·         Polimorfismo de sobrecarga
·         Polimorfismo paramétrico (también llamado polimorfismo de plantillas)
·         Polimorfismo de inclusión (también llamado redefinición o subtipado)

ejemplo
public class Articulo {
 private float precio;
 public void setPrecio() {
  precio = 3.50;
 }
 public void setPrecio(float nuevoPrecio) {
  precio = nuevoPrecio;
 }
 public void setPrecio(float costo, int porcentajeGanancia) {
       precio = costo + (costo * porcentajeGanancia);
    }
}




Encapsulación: La encapsulación es un mecanismo que consiste en organizar datos y métodos de una estructura, conciliando el modo en que el objeto se implementa, es decir, evitando el acceso a datos por cualquier otro medio distinto a los especificados. Por lo tanto, la encapsulación garantiza la integridad de los datos que contiene un objeto.
 (por ejemplo, uno puede asegurarse de que el tipo de datos suministrados cumple con nuestras expectativas bien que los se encuentran dentro del periodo de tiempo esperado).
Abstracción: Abstracción Expresa las características esenciales de un objeto, las cuales distinguen al objeto de los demás.
 Ejemplo Imaginemos que queremos aplicar la abstracción a las Aves. El objeto seria el pájaro, y sus características, por ejemplo, serian: Pico Alas Plumas Patas Las funcionalidades asociadas serian: Volar





Interfaz:

Las interfaces, tal como las clases abstractas. no se pueden instanciar. Sus métodos deben ser re-escritos por la clase que implemente.
Ejemplo fome:
1
2
3
4
5
6
7
8
9
10
public interface MatematicaVectorial {

 public static double pi    = 3.1415;
 public static double e     = 2.71828;

 public double[] sumar(int[][] vectores);
 public double[] restar(int[][] vectores);
 public double productoPunto(int[][] vectores);

}

 

Clase:

Las clases son plantillas que agrupan comportamiento (métodos) y estados (atributos) de los futuros objetos.
Los objetos son instancias de una clase. Usando el símil “variable – tipo” de la programación estructurada, se entiendo que un objeto es una variable que tiene el comportamiento y estados del tipo (objeto)
Veamos la creación de la clase Persona
1
2
3
4
5
6
7
8
9
public class Persona {
      public String nombre;
      public int edad;

      public void correr(){
              /* por implementar */
      }

}

Atributos
Los atributos son todas aquellas características que le asociamos a un tipo de objeto (clase). Si por ejemplo, queremos definir los atributos de una clase llamada Perro, podemos especificar que son la raza, la edad, su color y el nombre del dueño, por mencionar solo algunos de ellos. Los atributos que asociamos a una clase, dependen en gran medida del uso que le daremos dentro del sistema que diseñamos actualmente, pero también pueden ser definidos pensando en futuras implementaciones.


Métodos: En la programación orientada a objetos, un método es una subrutina cuyo código es definido en una clase y puede pertenecer tanto a una clase, cómo es el caso de los métodos de clase o estáticos, como a un objeto, como es el caso de los métodos de instancia. Análogamente a los procedimientos en los lenguajes imperativos, un método consiste generalmente de una serie de sentencias para llevar a cabo una acción, un juego de parámetros de entrada que regularán dicha acción o, posiblemente, un valor de salida (o valor de retorno) de algún tipo.
 por ejemplo, la clase Perro puede tener los métodos correr, comer, bañar y vacunar, por mencionar algunos de ellos. A nivel de implementación, estos métodos son segmentos de código similares a los procedimientos y funciones utilizadas en la programación modular.
Objeto:  un objeto es una unidad dentro de un programa de computadora que consta de un estado y de un comportamiento, que a su vez constan respectivamente de datos almacenados y de tareas realizables durante el tiempo de ejecución. Un objeto puede ser creado instanciando una clase, como ocurre en la programación orientada a objetos, o mediante escritura directa de código y la replicación otros objetos, como ocurre en la programación basada en prototipos.
Aritmetica calculador = Aritmetica();
#Otra manera usando punteros
Aritmetica* calculador1 = new Aritmetica();




Agregación:
Una agregación es una relación que representa a los objetos compuestos. Un objeto es compuesto si se compone a su vez de otros objetos.  La agregación de objetos permite describir modelos del mundo real que se componen de otros modelos, que a su vez se componen de otros modelos. 
Nos esta diciendo que los objetos pasajero forman parte del objeto medio de transporte.Pero, su ciclo de vida no esta atado al del objeto medio de transporte. Es decir si el Autobus se destruye los pasajeros pueden seguir existiendo independientemente, ( o por lo menos por eso rezaríamos)

Es la propiedad que distingue un objeto activo de uno no activo. Concurrencia permite que diferentes objetos actuen al mismo tiempo, usando distintos threads de control.
Es la propiedad por la cual la existencia de un objeto trasciende en el tiempo (esto es, el objeto sigue existiendo despues de que su creador deja de existir) o en el espacio (esto es, la localización del objeto cambia respecto a la dirección en la que fue creado).
  • Visibilidad: capacidad de restringir el acceso a atributos y servicios de un objeto. Particularmente importante en el diseño e implementación. (ej.: público / protegido / privado)

miércoles, 24 de julio de 2013

PROYECTOS Y TIPOS DE REQUISITOS


Requerimientos funcionales
 Son declaraciones de los servicios que debe proporcionar el sistema, de la manera en que éste debe reaccionar a entradas particulares y de cómo se debe comportar en situaciones particulares .En algunos casos, los requerimientos funcionales de los sistemas también pueden declarar explícitamente lo que el sistema no debe hacer

Los requerimientos funcionales de un sistema describen lo que el sistema debe hacer. Estos requerimientos dependen del tipo de software que se desarrolle, de los posibles usuarios del software y del enfoque general tomado por la organización al redactar requerimientos. Cuando se expresan como requerimientos del usuario, habitualmente se describen de una forma bastante abstracta. Sin embargo. Los requerimientos funcionales del sistema describen con detalle la función de éste, sus entradas y salidas, excepciones, etcétera. Los requerimientos funcionales para un sistema software se pueden expresar de diferentes formas. A continuación se presentan algunos ejemplos de estos requerimientos funcionales para un sistema de biblioteca universitaria, denominada LIBSYS, utilizada por estudiantes y personal docente que solicitan libros y documentos de otras bibliotecas.
1. El usuario deberá tener la posibilidad de buscar en el conjunto inicial de la base de datos o seleccionar un subconjunto de ella.
2. El sistema deberá proporcionar visores adecuados para que el usuario lea documentos en el almacén de documentos.
3. A cada pedido se le deberá asignar un identificador único (ID_PEDIDO), que el usuario podrá copiar al área de almacenamiento permanente de la cuenta.
Estos requerimientos funcionales del usuario definen los recursos específicos que el sistema debe proporcionar. Dichos requerimientos se toman del documento de requerimientos del usuario, e ilustran los diferentes niveles de detalle en que se pueden redactar los requerimientos funcionales (contraste los requerimientos l y 3). El sistema LIBSYS es una interfaz única para diferentes bases de datos de artículos. Esto permite a los usuarios descargar copias de artículos publicados en revistas. Periódicos y publicaciones científicas. Una descripción más detallada de los requerimientos para el sistema en el cual se basa LIBSYS se puede ver en mi libro con Gerald Kotonya sobre ingeniería de requerimientos (Kontonya y Sommerville, 1998). La impresión en la especificación de requerimientos es la causa de muchos de los problemas de la ingeniería del software.
Para un desarrollador de sistema es natural dar interpretaciones de un requerimiento ambiguo con el fin de simplificar su implementación. Sin embargo. a menudo no es lo que el cliente desea. Se deben establecer nuevos requerimientos y hacer cambios en el sistema. Por supuesto. Esto retrasa la entrega de éste e incrementa los costes.

Requerimientos no funcionales

Requerimientos no funcionales. Son restricciones de los servicios o funciones ofrecidos por el sistema. Incluyen restricciones de tiempo, sobre el proceso de desarrollo y estándares. Los requerimientos no funcionales a menudo se aplican al sistema en su totalidad. Normalmente apenas se aplican a características o servicios individuales del sistema.

Los requerimientos no funcionales, como su nombre sugiere, son aquellos requerimientos que no se refieren directamente a las funciones específicas que proporciona el sistema, sino a las propiedades emergentes de éste como la fiabilidad, el tiempo de respuesta y la capacidad de almacenamiento. De forma alternativa, definen las restricciones del sistema como la capacidad de los dispositivos de entrada/salida y las representaciones de datos que se utilizan en las interfaces del sistema.

Los requerimientos no funcionales rara vez se asocian con características particulares del sistema. Más bien, estos requerimientos especifican o restringen las propiedades emergentes del sistema. Por lo tanto, pueden especificar el rendimiento del sistema, la protección, la disponibilidad, y otras propiedades emergentes. Esto significa que a menudo son más críticos que los requerimientos funcionales particulares. Los usuarios del sistema normalmente pueden encontrar formas de trabajar alrededor de una función del sistema que realmente no cumple sus necesidades. Sin embargo. el incumplimiento de un requerimiento no funcional puede significar que el sistema entero sea inutilizable.

Por ejemplo, si un sistema de vuelo no cumple sus requerimientos de fiabilidad, no se certificará como seguro para el funcionamiento; si un sistema de control de tiempo real no cumple sus requerimientos de rendimiento, las  
Funciones de control no funcionarán correctamente. Los requerimientos no funcionales no sólo se refieren al sistema software a desarrollar. Algunos de estos requerimientos pueden restringir el proceso que se debe utilizar para desarrollar el sistema. Ejemplos de requerimientos de procesos son la especificación de los estándares de calidad que se deben utilizar en el proceso, una especificación que 


Proyecto se refiere a todas las acciones que deben realizarse para cumplir con una necesidad definida dentro de los plazos. Así, ya que el proyecto es una acción temporaria que tiene principio y fin, que utiliza recursos identificados (humanos y materiales) durante su ejecución, y que tiene uncosto, deberá tener recursos presupuestados y una hoja de balance independiente a la de la compañía. "Productos finales" se refiere a los resultados esperados del proyecto.
Diagrama de los objetivos-costos-plazos
La dificultad de la gestión de un proyecto radica en gran medida en la cantidad de personas involucradas. De hecho, en contrapartida con los proyectos personales o internos en pequeña escala para los cuales la necesidad y la respuesta para dicha necesidad puede ser provista por la misma persona o por un grupo limitado de personas, en un proyecto en el sentido profesional, la expresión de una necesidad y la satisfacción de esta necesidad generalmente es responsabilidad de diferentes personas.
Así, es necesario asegurarse (para toda la duración del proyecto) que el producto que se está creando cumpla claramente con las expectativas del "cliente". En contraposición con el modelo tradicional comercial ("vendedor"/"comprador") en el que un cliente compra un producto ya fabricado para que cumpla con su necesidad, el proyecto busca crear un producto original que cumpla con una necesidad específica que debe estar claramente expresada. Esta expresión de las necesidades es incluso más difícil ya que generalmente el proyecto no tiene precedentes dentro de la compañía, dado que es una novedad. En forma opuesta, generalmente es difícil resumir soluciones existentes y concentrarse solamente en las necesidades en términos funcionales.
Ejemplo: para  realización de  un proyecto se deben tener en  cuenta  muchas  factores las cuales  van a ayudar  a  que este  proyecto conlleve  mas n aya  de lo común.
por ejemplo para la realización de  un software de contabilidad, debemos tener en cuenta que es lo que  nos están pidiendo  y desde  allí desglosar  un mundo de parámetros para  plantear  una "hipótesis"   o  un pequeño plano de lo que se va eleborar  para esto surgen  las preguntas como, cuando , donde  para que o con que fin , riesgos   que podría tener.
ya después de plantear  todo   con la  cual se  podra elaborar  el proyecto,se pasa  a la  getion de anctividades , recolección de papeleo, aleboracion de un sistema  para la elaboracion  de este,requiesitos, un listado con todo lo que nos esta pidiendo  la persona a la  cual le estamos realizando el trabajo,  mirar minuciosamente que nos sirve  y que no nos sierbe.
luego     de tener  todo  esto planteado y organiado daremos paso a la elaboracion del proyecto,para que  este proyecto  no se  cea afectado por  un lacso de tiempo  deberemos de tener un cronograma  que   nos facilitara para  ver con que tiempo    estamos elaborando  el programa   si si   nos esta rindiendo el tiempo instipulado por el cliente o si  nos estamos retrasando  por  alguna  rezon, si seestra retrasando el trabajo analizar y  mirar ell por que  de la situacion  y  dar una solucion  lo mas antes posible


3)MODULO
En programación un módulo es una porción de un programa de computadora. De las varias tareas que debe realizar un programa para cumplir con su función u objetivos, un módulo realizará, comúnmente, una de dichas tareas (o varias, en algún caso).
En general (no necesariamente relacionado con la programación), un módulo recibe como entrada la salida que haya proporcionado otro módulo o los datos de entrada al sistema (programa) si se trata del módulo principal de éste; y proporcionará una salida que, a su vez, podrá ser utilizada como entrada de otro un módulo o bien contribuirá directamente a la salida final del sistema (programa), si se retorna al módulo principal.
Particularmente, en el caso de la programación, los módulos suelen estar (no necesariamente) organizados jerárquicamente en niveles, de forma que hay un módulo principal que realiza las llamadas oportunas a los módulos de nivel inferior.
Cuando un módulo es convocado, recibe como entrada los datos proporcionados por otro del mismo o superior nivel, el que ha hecho la llamada; luego realiza su tarea. A su vez este módulo convocado puede llamar a otro u otros módulos de nivel inferior si fuera necesario; cuando ellos finalizan su tareas, devuelven la salida pertinente al módulo inmediato llamador, en secuencia reversa, finalmente se continúa con la ejecución del módulo principal.

CARACTERISTICAS DE UN MODULO

.Cada uno de los módulos de un programa idealmente debería cumplir las siguientes características:
  • Tamaño relativamente pequeño.- Esto facilita aislar el impacto que pueda tener la realización de un cambio en el programa, bien para corregir un error, o bien por re diseño del algoritmo correspondiente.
  • Independencia modular.- Cuanto más independientes son los módulos entre sí más fácil y flexible mente se trabajará con ellos, esto implica que para desarrollar un módulo no es necesario conocer detalles internos de otros módulos. Como consecuencia de la independencia modular un módulo cumplirá:
La independencia modular mejora el rendimiento humano, pudiendo realizarse programación en equipo y desarrollar módulos paralelamente. También contribuye a la re utilización de software.