Unidad 1: Fase 1 - Análisis De Requisitos
Yaneth Marcela Rodríguez Vinasco - Cód. 1.088.248.071 Balwin Gerardo Ladino Valencia – Cód. 95032813624 Ivan Salamanca Cely – Cód. 86.053.048 Sergio Iván Rodríguez-Cód.
Ing. Franklin Lizcano Celis Director de Curso
Grupo: 301403_30
Universidad Nacional Abierta Y A Distancia (Unad) Escuela De Ciencias Básicas Tecnología E Ingeniera Programación Orientada A Objetos Febrero 2018
DESARROLLO DE LA ACTIVIDAD
1.
Elección del proyecto a desarrollar. El proyecto elegido por el grupo es el del Mini mercado Surtimax S.A.
2.
Características generales de la programación orientada objetos. 2.1 ¿Cuál es la diferencia entre programación estructurada y programación
orientada a objetos? Programación estructurada
Programación orientada a objetos
Divide los programas en módulos,
Usa objetos y sus interacciones
fáciles de leer
para diseñar programas
Va de lo general a lo particular
Incluye datos y procedimientos procedimientos en una clase
Estructura secuencial, las
Procedimientos separados y sin
instrucciones se ejecutan una
relación
después de la otra Uso de condicionales condicionales para ejecutar ejecutar
Encapsulan datos en objetos que
una acción, orientada a acciones
están relacionados entre sí.
Uso de instrucciones repetitivas
La unidad de programación es la
hasta que se cumpla una condición
clase.
y se pueda terminar el ciclo, unidad de programación es a la función. Fácil detección de errores debido a
Estructura no secuencial, no es fácil
que las instrucciones son
la detección de errores
secuenciales
2.2 Ventajas y desventajas de la programación orientada a objetos.
Veamos las ventajas más importantes de la programación orientada a objetos,
DESARROLLO DE LA ACTIVIDAD
1.
Elección del proyecto a desarrollar. El proyecto elegido por el grupo es el del Mini mercado Surtimax S.A.
2.
Características generales de la programación orientada objetos. 2.1 ¿Cuál es la diferencia entre programación estructurada y programación
orientada a objetos? Programación estructurada
Programación orientada a objetos
Divide los programas en módulos,
Usa objetos y sus interacciones
fáciles de leer
para diseñar programas
Va de lo general a lo particular
Incluye datos y procedimientos procedimientos en una clase
Estructura secuencial, las
Procedimientos separados y sin
instrucciones se ejecutan una
relación
después de la otra Uso de condicionales condicionales para ejecutar ejecutar
Encapsulan datos en objetos que
una acción, orientada a acciones
están relacionados entre sí.
Uso de instrucciones repetitivas
La unidad de programación es la
hasta que se cumpla una condición
clase.
y se pueda terminar el ciclo, unidad de programación es a la función. Fácil detección de errores debido a
Estructura no secuencial, no es fácil
que las instrucciones son
la detección de errores
secuenciales
2.2 Ventajas y desventajas de la programación orientada a objetos.
Veamos las ventajas más importantes de la programación orientada a objetos,
-
Reusabilidad. Cuando hemos diseñado adecuadamente las clases, se
pueden usar en distintas partes del programa. -
Mantenibilidad. Debido a la sencillez para mostrar el problema, los
programas orientados a objetos son más sencillos de leer y comprender, pues nos permiten ocultar detalles de implementación dejando visibles sólo aquellos detalles más relevantes. -
Modificabilidad . La facilidad de añadir, suprimir o modificar nuevos
objetos nos permite hacer modificaciones de una forma muy sencilla. -
Fiabilidad . Al dividir el problema en partes más pequeñas podemos
probarlas de manera independiente y aislar mucho más fácilmente los posibles errores que puedan surgir. Desventajas de la programación orientada a objetos, -
Cambio en la forma de pensar de la programación tradicional tradicional a la orientada a objetos.
-
La ejecución de programas orientados a objetos es más lenta.
-
La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y entrenamiento.
2.3 Sintaxis para definir variables en Java.
Variables y Tipos. Una variable en Java es un identificador que representa una palabra de memoria que contiene información. El tipo de información almacenado en una variable sólo puede ser del tipo con que se declaró esa variable. Una variable se declara usando la misma sintaxis de C. Por ejemplo la siguiente tabla indica una declaración, el nombre de la variable introducida y el tipo de información que almacena la variable:
Java posee dos grandes categorías de tipos para las variables:
Las variables de tipos primitivos almacenan directamente un valor que siempre pertenece al rango de ese tipo. Por ejemplo una variable int almacena un valor entero como 1, 2, 0, -1, etc. Esto significa que al asignar una variable entera a otra variable entera, se copia el valor de la primera en el espacio que ocupa la segunda variable. Las variables de tipo referencia a objetos en cambio almacenan direcciones y no valores directamente. Una referencia a un objeto es la dirección de un área en memoria destinada a representar ese objeto. El área de memoria se solicita con el operador new. Al asignar una variable de tipo referencia a objeto a otra variable se asigna la dirección y no el objeto referenciado por esa dirección. Esto significa que ambas variables quedan refenciando el mismo objeto. La diferencia entre ambas asignaciones se observa en la siguiente figura:
2.4 Sintaxis para imprimir en consola en Java.
Para imprimir por pantalla utiliza el objeto System.out que representa una salida estándar y corresponde con la pantalla u otra salida especificada en las variables de entorno del sistema en el que se ejecuta. Existen diferentes métodos como lo son el print , el cual puede recoger cualquier tipo de variable de datos, cadena u objeto. También está el println, el cual imprime un salto de línea final y el format que permite escribir los datos ajustándose a un determinado formato. Ejemplo: System.out.print("Hola"); En pantalla se muestra la palabra “Hola” O también: String valor = "Este es el mensaje: "; System.out.println(valor+ " Hola"); En pantalla se muestra “Este es el mensaje: Hola” 2.5 Sintaxis para comentar en Java.
Para incluir un comentario el cual nos sirve de apoyo en la documentación del programa y facilitar su comprensión por parte de alguna otra persona. Estas líneas no son tenidas en cuenta al compilar el programa. Los comentarios pueden ser introducidos en cualquier parte del código y comienzan por un doble slash “//”. Al ingresar el doble slash en la línea de código todo lo que
haya de ahí en adelante será tomado como comentario, sin embargo las líneas debajo de este no se ven afectados. Ejemplo:
System.out.print("Hola"); //Esta línea mostrará Hola en pantalla. También es posible insertar múltiples líneas de comentarios, para ello es los comentarios deben ir encerrados entre “/*” y “*/”. Ejemplo:
/* Esta línea no se ejecuta ---- for(int i = 0; i <= 0; i++) Esto aun sigue siendo un comentario System.out.print("Hola"); //Este es otro comentario */ 2.6 Sintaxis de los operadores lógicos y relacionales.
Los operadores lógicos se utilizan para construir expresiones lógicas combinando valores lógicos (falso o verdadero). Los operadores lógicos son: & : Devuelve verdadero si las dos expresiones son verdaderas. | : Devuelve verdadero si una de las expresiones es verdadera. ! : Devuelve verdadero si la expresión es falsa y falso si la expresión es verdadera. && : Devuelve verdadero si las dos expresiones son verdaderas, si la primera opción es falsa ya no se evalúa la segunda. || : Devuelve verdadero si una de las dos expresiones es verdadera, pero si la opción 1 es falsa ya no se evalúa la segunda. Los operadores relacionales se utilizan para realizar comparaciones de igualdad, desigualdad y relación de menor o mayor, el resultado es siempre booleano (falso o verdadero). Los operadores relacionales son: < : Devuelve verdadero si el operador 1 es menor que el operador 2. <= :Devuelve verdadero si el operador 1 es menor o igual que el operador 2. > : Devuelve verdadero si el operador 1 es mayor que el operador 2. >= :Devuelve verdadero si el operador 1 es mayor o igual que el 2. == :Devuelve verdadero si los dos operadores son iguales. != : Devuelve verdadero si los dos operadores son diferentes. 2.7 Defina Clase, instancia de clase, atributo, comportamiento, identidad,
constructor e identificadores. Clase: (Java Class) Son plantillas para la creación de objetos, en lo que se
conoce como programación orientada a objetos, la cual es una de los principales paradigmas de desarrollo de software en la actualidad. Una Clase es una especie de "plano", contiene todas las características y funciones o métodos que realizaran alguna acción sobre un objeto.
Instancia de clase: Cuando creamos una instancia de la clase en ejecución
tendremos las variables de instancia, una por cada atributo, y todas integradas dentro de la misma instancia. Todas las instancias de la misma clase tendrán los mismos atributos (nombre y tipo), pero cada una de ellas irá tomando distintos valores para ellos. Es decir, tendremos una copia de los atributos por cada objeto de una clase que creemos. Por ejemplo, tuCoche sería una instancia de la clase Coche y daremos a la variable de instancia velocidadMaxima el valor 180. Mientras que la instancia cocheDeNigell tiene su propia variable velocidadMaxima con el valor 300. Atributo: Los atributos son las características individuales que diferencian un
objeto de otro y determinan su apariencia, estado u otras cualidades. Los atributos se guardan en variables denominadas de instancia, y cada objeto particular puede tener valores distintos para estas variables. Comportamiento: El comportamiento de los objetos de una clase se
implementa mediante funciones miembro o métodos. Un método es un conjunto de instrucciones que realizan una determinada tarea y son similares a las funciones de los lenguajes estructurados. Del mismo modo que hay variables de instancia y de clase, también hay métodos de instancia y de clase. En el primer caso, un objeto llama a un método para realizar una determinada tarea, en el segundo, el método se llama desde la propia clase. Identidad: La identidad es una propiedad de un objeto que lo diferencia del
resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante). Constructor: Un objeto de una clase se crea llamando a una función especial
denominada constructor de la clase. El constructor se llama de forma automática cuando se crea un objeto, para situarlo en memoria e inicializar los miembros dato declarados en la clase. El constructor tiene el mismo nombre que la clase. Lo específico del constructor es que no tiene tipo de retorno. class Rectangulo{ int x; int y; int ancho; int alto; Rectangulo(int x1, int y1, int w, int h){ x=x1;
y=y1; ancho=w; alto=h; }
}
El constructor recibe cuatro números que guardan los parámetros x1, y1, w y h, y con ellos inicializa los miembros dato x , y , ancho y alto. Una clase puede tener más de un constructor. Por ejemplo, el siguiente constructor crea un rectángulo cuyo origen está en el punto (0, 0). class Rectangulo{ int x; int y; int ancho; int alto; Rectangulo(int w, int h){ x=0; y=0; ancho=w; alto=h; } }
Identificadores: Un identificador es un nombre que identifica a una variable,
a un método o función miembro, a una clase. Todos los lenguajes tienen ciertas reglas para componer los identificadores: - Todos los identificadores han de comenzar con una letra, el carácter subrayado ( _) o el carácter dollar ( $ ). - Puede incluir, pero no comenzar por un número - No puede incluir el carácter espacio en blanco - Distingue entre letras mayúsculas y minúsculas - No se pueden utilizar las palabras reservadas como identificadores Además de estas restricciones, hay ciertas convenciones que hacen que el programa sea más legible, pero que no afectan a la ejecución del programa. La primera y fundamental es la de encontrar un nombre que sea significativo, de modo que el programa sea lo más legible posible. El tiempo que se pretende ahorrar eligiendo nombres cortos y poco significativos se pierde con creces cuando se revisa el programa después de cierto tiempo. Tipo de identificador
Convención
Ejemplo
nombre de una clase
Comienza por letra mayúscula
String, Rectangulo, CinematicaApplet
nombre de función
comienza con letra minúscula
nombre de variable
comienza por letra minúscula
calcularArea, getValue, setColor área, color, appletSize
nombre de constante
En letras mayúsculas
PI, MAX_ANCHO
2.8 Informe los tipos de clase.
En java existen 4 tipos de clases: Clase Public: Tiene la característica de ser accesible desde cualquier otra
clase. Se puede acceder a ellas directamente o por herencia, estando en el mismo paquete o desde otros paquetes, primero hay que importarlos con la sentencia “import”. Un detalle de las clases del tipo “public” es que el archivo con el que se
guardan debe tener el mismo nombre de la clase, de otra forma se presentará un error de compilación. Uno puede llamar a una clase public desde otra, si se encuentran en la misma carpeta, de otra forma tendrá dificultades para interactuar con esta. Un ejemplo de uso de una clase public sería: public class banco { // cuerpo de la clase } Y al momento de grabar el programa, tendríamos que ponerle al archivo el nombre de “banco.java”.
Clase Abstract: Sin la necesidad de implementar métodos, es decir se dejan
incompletos para después ser refinados mediante el mecanismo de la herencia, se puede fijar un conjunto de métodos y atributos. Las clases abstractas trabajan junto con los métodos abstractos, los cuales están vacíos. Esto es muy útil cuando la implementación es específica pero cada usuario, cada uno puede implementarlos como le parezca, pero sus métodos deben tener los mismos nombres que se dieron antes.
Por ejemplo al ver una declaración de métodos en una clase abstracta solo podemos observar algunas líneas que solamente tienen los datos que van a recibir los métodos, pero el código que ejecutara el método no está, eso quiere. Decir que podría estar en otro sitio. Se puede decir que es una base para la herencia. Pueden ser a la vez clases “public”. Aquí un ejemplo de una clase:
public abstract class Triangulo { public abstract void Area_Triangulo(int b,int h); public abstract void Perímetro( int x,int y,int z); ... } Clase Final: Una clase final es la que acaba con una cadena de herencia. De
la clase final no se puede heredar nada. Al decir que termina la cadena de herencia significa que ya no se sub-divide en más clases, pues indica que es el final de las divisiones. Las organizaciones de clases en java suelen ser de la siguiente forma: class A{} class B extends A { } Con lo que se indica que de la clase A sale una sub-clase o clase hija que es B. Pero se puede modificar este tipo de organizaciones al usar “final”.
Sería de la siguiente forma: final class A { } Con lo que se está indicando que de la clase A no van a salir otras clases. Es posible mezclar final con public, es decir, se puede tener algo como esto: public final class A{ } Uno puede declarar su clase como “final” por algunos motivos.
Motivo de seguridad. Motivo de eficiencia. Por ejemplo, la clase java.lang.String está declarada como “final”, por lo tanto no perm ite crear una sub-clase
String y darle un método length() que yo haya creado y que haga algo diferente a devolverme la longitud de una cadena. El otro motivo para usar
“final” es la eficiencia. Se trabaja solo con instancias de la clase sin tener que
ir a las sub-clases, así puedes optimizar esa clase.
Clases Synchronizable: “Synchronizable” se especifica que todos los
métodos que estén definidos dentro de esta clase serán sincronizados. Para esto debemos saber que la computadora puede llevar a cabo varios threads a la vez; un thread es un flujo de control para controlar la ejecución de un programa. Si no se utiliza alguno de los modificadores al momento de crear una clase, por defecto, Java asume que la clase es: No final, No abstracta, Subclase de la clase Object, No implementa interfaz alguno 2.9 Describa el concepto de Modularización.
Los programas pueden escribirse en módulos, los que permiten que un problema general pueda descomponerse en una serie de subproblemas independientes (Divide y vencerás). Se puede repartir la tarea entre varias personas, y concentrarse en la resolución de cada subproblema.
Ilustración 1 Modularización https://www.fing.edu.uy/inco/cursos/fpr/wiki/index.php/Archivo:Modularizacion.png
Cuando una tarea debe realizarse más de una vez en un mismo programa, la modularización evita la programación redundante, ya que una vez definida la tarea como un módulo independiente, puede ser invocada desde cualquier parte del código; se aprecia también una menor longitud del programa. Otra ventaja de importancia es la claridad que resulta de la descomposición de un programa en módulos concisos e independientes, representando cada uno de estos una parte bien definida del problema en su conjunto, permitiendo escribir y depurar el código más fácil. Su estructura lógica es más clara, lo cual es sumamente útil si el programa es largo y complicado.
Adicionalmente, esta consiste en particionar un sistema de acuerdo a ciertos principios de diseño y a una estrategia de desarrollo, gobernando las dependencias entre las partes resultantes. Sin embargo, implementar una modularización adecuada no es algo trivial; las técnicas disponibles son diversas y no existe consenso sobre cuáles son las mejores en cada caso. 2.10
Describa el concepto de Herencia
La herencia se define como el mecanismo que permite la definición de una clase a partir de la definición de otra ya existente, la herencia permite compartir automáticamente métodos y datos entre clases, subclases y objetos. Esta está fuertemente ligada a la reutilización del código en la POO, esto es, el código de cualquiera de las clases puede ser utilizado sin más que crear una clase derivada de ella, o bien una subclase. Existen dos tipos de herencia: Herencia simple; la primera indica que se pueden definir nuevas clases solamente a partir de una clase inicial. Herencia múltiple; esta indica que se pueden definir nuevas clases a partir de los más clases iniciales, Java solo permite herencia simple Superclases y Subclases El concepto de herencia conduce a una estructura jerárquica de clase o estructura de árbol, lo cual significa que en la POO todas las relaciones entre clases deben ajustarse a dicha estructura. En esta estructura jerárquica, cada clase tiene solo una clase padre, la clase padre de cualquier clase es conocida como su superclase, la clase hija de una superclase es llamada una subclase. -
Una superclase puede tener cualquier cantidad de subclases. Una subclase puede tener solo una superclase.
Clase A ----------------------------Id: integer Nombre: String Apellidos String Edad: integer Viajar(): void Concentrarse(): void Entrenamiento(): void Partido(): void
Clase B ----------------------------dorsal: integer demarcacion: String
Clase D -------------------------------------------Id federacion: integer
Clase C ------------------------------titulacion: String aniosExperiencia: integer
planificarEntrenamiento(): void -------------------------------darMasaje(): void
entrevista(): void
Clase E --------------------------------Id: integer pasarInstrumentos: String auxiliar(): void
Dónde:
2.11
A es la superclase de B, C y D. C es la superclase de E. B, C y D son subclases de A. E es una subclase de C.
Describa el concepto de Polimorfismo
Otro objeto de la POO es el polimorfismo o muchas formas; un objeto solo tiene una forma (la que se le dé al crearlo) pero su referencia a objeto es polimórfica porque puede referirse a objetos de diferentes clases (la referencia toma múltiples formas) y para que esto sea posible deb e existir la relación de herencia entre esas clases; por ejemplo, -
Una referencia a un objeto de la clase B también puede ser una referencia a un objeto de la clase A. Una referencia a un objeto de la clase D también puede ser una referencia a un objeto de la clase A. Una referencia a un objeto de la clase E también puede ser una referencia a un objeto de la clase A. Ahora como hemos visto las clases B, C, y D, tienen como padre o superclase a A, lo que hace obligatorio implementar en las clases hijas, lo importante de la herencia y el polimorfismo es que las hijas heredan los métodos de las clases padre, donde las clases hijas se pueden especializar; lo que quiere decir que las hijas se pueden redefinir los métodos, o sea que se puede volver a escribir ese método resultando la especialización de la hija, implementemos un ejemplo; públic abstrac class Clase A { protectec int id; protectec String nombre; protectec String apellidos; protectec int edad; // tener en cuenta que se deben usar los constructores, getter y setter Public void viajar() { System.out.println (“viajar (clase A)”); } Public void concentrarse () { System.out.println ( “concentrarse (clase A)”); } // Importante--- el método abstracto no se implementa en la clase padre, pero si en la hijas Public abstract void entrenamiento (); Public void partido() { System.out.println(“asiste al partido (clase A)”);
}
} Lo primero que nos llama la atención, es que utilizamos dos veces la palabra reservada “abstract”, esto nos indica que la clase “Clase A” es una clase abstracta y por ello, estas clases no se pueden instanciar, por ello no podremos hacer un “new Clase A”. Ahora vemos donde si podemos utilizar la palabra reservada “abstract” en un método (este es el método
entrenamiento), lo que quiere decir que todas la clases hijas de la clase “Clase A” se debe implementar ese método obligatoriamente; con esto podemos decir que la clase “Clase A” es una cl ase polimorfa y sus las posibles formas que puede adoptar son “Clase B, Clase C, Clase D” .
2.12
Describa el concepto de Encapsulamiento
El concepto consiste en la forma de ocultar el estado de los datos miembro del objeto, de tal forma que solo sea posible modificar los mismos mediante los métodos definidos para el objeto. Cada uno será aislado del exterior, de forma que la aplicación es un conjunto de objetos que colaboran entre sí, mediante el paso de mensajes invocando sus operaciones o métodos. De esta manera los detalles de implementación permanecen "ocultos" a las personas que usa n las clases, evitando modificaciones a los códigos o accesos indebidos a los datos que almacenan las clases. Teniendo en cuenta esto, el usuario de la clase no se tiene que preocupar de cómo están implementados los métodos y propiedades, concentrándose sólo en cómo debe usar. Es importante tener en cuenta el método de validaciones para prevenir que no se le asigne un valor no valido a la variable. Veamos un ejemplo; donde se asigna un valor negativo a la variable que no ha sido prevista y esto genere errores de resultados.
Analizando este código vemos que cuenta con variables enteras públicas, tipo y clase que pueden ser accedidas desde una instancia de la clase MiClase, esto está bien, pero que pasa si asignamos un valor no previsto para la variable, donde no hay nada que nos lo impida, donde se requiere una solución que nos permita validar el contenido de la variable que se le va a asignar y escondiendo la variable impidiendo el acceso de forma directa, siendo este el principio básico del encapsulamiento; para ello realizaríamos lo siguiente; - Una forma seria usar un modificador de acceso. - Hacer métodos de acceso públicos obligando el acceso a las variables por medio de estos métodos. - Usar convenciones de código para los nombres de los métodos, set y get. Ahora vemos el ejemplo modificado para un buen encapsulamiento;
Veamos la sentencia setTipo() para esta no existe validación de valor no valido, pero el hecho de asignar un método de este tipo desde el diseño de la aplicación nos permitirá modificar su comportamiento sin afectar el método utilizado, si es necesario en un futuro modificar la variable a un rango de valores especifico sin que se genere resultados negativos.
2.13
Informe cómo convertir un String a entero en Java
R: Específicamente para int, puedes usar los siguientes métodos de la clase Integer static String toString(int i) si quieres la representación del int en base 10 static String toString(int i, int b) si quieres la representación del int en una base especifica b
Ejemplo : String stringNumero = String.valueOf(32); String stringNumero2 = Integer.toString(32); //Equivalente a la anterior int otroNumerillo = Integer.parseInt("32");
2.14
Defina el concepto de método y realice un ejemplo constructor
R: Tipos de métodos, el primer tipo de método son métodos que realizan procesos, puedes realizar cualquier operación con ellos, sin embargo el propósito es manipular variables existentes. El segundo tipo de métodos son los que realizan un proceso o cálculo, y calculan una variable específica, un ejemplo podría ser un método para obtener el valor de una multiplicación. Los métodos en java pueden tener parámetros, es decir, que un método puede utilizar variables predefinidas para ser utilizadas en sus procesos, Veamos un ejemplo de cómo hacer un método en el siguiente ejemplo En este ejemplo vemos un programa normal en el cual se ejecuta un ciclo while que imprime números del 0 al 7, 01 package ciclos; 02 03 /** 04 * 05 * @author xymind 06 */ 07 public class Main { 08 09 /** 10 * @param args the command line arguments 11 */ 12 public static void main(String[] args) { 13 14 iniciarCiclo();//aqui estamos ejecutando el metodo escrito en 15 //la parte de abajo, se puede utilizar mas de 1 vez 16 } 17
18 /*Comienza el metodo 19 Este metodo no regresa valores, es un metodo que unicamente 20
realiza un procedimiento, por lo que se declara como del
"void" seguido
21 nombre que tendra el metodo*/ 22 public void iniciarCiclo(){ 23 24 int x=0; 25 while(x!=7) 26 { 27 System.out.println("X vale: "+x); 28 x++; 29 30 } 31 } 32 33 }
Qué función tiene el paquete Swing en Java y describa sus principales características.
2.15
R: Es un paquete que hace parte de la Java Foundation Classes o más conocida como JFC, la cual provee herramientas o facilidades para la construcción de GUI's o interfaces Graficas de Usuario (graphical user interface). Es un framework MVC para desarrollar interfaces gráficas para Java con independencia de la plataforma. Sigue un simple modelo d e programación por hilos, y posee las siguientes características principales: Independencia de plataforma. Extensibilidad: es una arquitectura altamente particionada, los usuarios pueden proveer sus propias implementaciones modificadas para sobrescribir las implementaciones por defecto. Se puede extender clases existentes proveyendo alternativas de implementación para elementos esenciales. Personalizable: dado el modelo de representación programático del framework de Swing, el control permite representar diferentes estilos de apariencia "look and feel" (desde apariencia MacOS hasta apariencia Windows XP, pasando por apariencia GTK+, IBM UNIX o HP UX, entre otros). Además, los usuarios pueden proveer su propia implementación de apariencia, que permitirá
cambios uniformes en la apariencia existente en las aplicaciones Swing sin efectuar ningún cambio al código de aplicación. Contenedores
Como vimos en entradas anteriores, un contenedor es el tapiz donde pintaremos nuestros componentes gráficos, 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, también 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 Atómicos
Los componentes atómicos son los elementos que no pueden almacenar otros objetos o componentes gráficos, 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 imágenes 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 Áreas 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 Texto.
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 Menú.
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ú emergente. Componentes Complejos
Estos son componentes un poco más avanzados, cumplen con funciones más enfocadas a procesos específicos 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 más un componente independiente que permite mostrar un cuadro de diálogo personalizable.
Consultar la estructura y sintaxis de cómo funcionan las excepciones en Java.
2.16
3. Análisis de requisitos del proyecto. Definición del Problema
¿Será posible mediante el uso de paradigma orientado a objetos y el uso de bases de datos MYSQL desarrollar el código de una aplicación para el mini mercado Surtimax S.A. con la cual se pueda registrar productos, clientes, consulta, actualización y ventas de productos? Objetivo General
Desarrollar una aplicación para el mini mercado Surtimax S.A. bajo el paradigma de la programación orientada a objetos para realizar el registro de productos y clientes y la actualización de la información, consulta y ventas de productos y de esta manera presentar la solución a los requerimientos planteados.
Objetivos Específicos
Como objetivos específicos se tienen: -
Generar el análisis del aplicativo, estableciendo los requerimientos para su compilación.
-
Desarrollar el aplicativo con respecto a los análisis de requerimientos promoviendo el diseño del mismo.
-
Diseñar un sistema de información que supla las necesidades de los requerimientos planteados en el análisis de requisitos.
-
Promover un aplicativo óptimo en seguridad, codificando las restricciones necesarias de acceso con usuarios registrados y pasword para el ingreso a la aplicación y así garantizar la seguridad de la aplicación y el acceso solo a personal autorizado.
-
Implementar un sistema que permita consultar información relacionada con los productos, con diferentes criterios de consulta como: El nombre del producto, el tipo de producto y Unidad de Medida, etc.
Requisitos Funcionales
Análisis de requisitos para una aplicación Inicialmente es preciso realizar un análisis de requerimientos. Este trata de capturar y describir detalladamente los requerimientos de funcionalidad del producto que se desarrolla. -
-
Identifica al cliente Entrevistar al cliente, identificando: a. Identificar deseos y necesidades. b. Utilizar las herramientas de expresión de requisitos. c. Hacer bosquejos de las interfaces de usuario. d. Identificar las plataformas de hardware que debe soportar el software. Elaborar documento de los requisitos de usuario, validado por el mismo. Inspeccionar los requisitos del usuario. Elaborar los requisitos detallados mediante documentos gráficos y textuales.
Recursos para la Especificación del sistema -
Descripción del proyecto: en este documento se describe de forma concisa y concreta el objetivo del sistema. Este debe contener; la
-
naturaleza y objetivo del producto, las características más relevantes, análisis de riesgos. Análisis del contexto: se debe construir el modelo de objetos de interacción física entre los actores y el sistema. Casos de uso: recursos para describir la funcionalidad del sistema, mostrando sus límites.
Actores -
Principales; usuarios que utilizan las funciones principales del sistema. Secundarios; personas que realizan tareas de mantenimiento o administrativas a la aplicación. Externos; equipos y dispositivos que forman el ámbito de la aplicación. Otros sistemas; externos al mismo pero interactúan con él.
Descripción de actores. -
Cliente. Persona que realiza los pedidos o compras en el sistema del
Surtimax S.A. Cajero. Persona encargada de realizar el registro de salida de productos en el sistema y realizar los cobros respectivos. Administrador o propietario . Persona encargada de la gestión administrativa principal, solicita informes del sistema del Surtimax S.A. Secretaria. Persona encargada de la carga de productos al inventario del sistema. Contador. Persona encargada de realizar las actividades de contabilización en el sistema y presentar informes a la administración. Manto. Persona encargada de realizar mantenimiento y actualización a la aplicación.
Casos de uso
Caso de uso Actor Tipo Propósito
Cliente
Cliente Inclusión Realiza compras o reclamaciones Interactúa con la aplicación, realiza compras, hace pedido de mercancías a entregar por mensajería, si Resumen desea puede generar un registro en el sistema para acceder a crédito en ventas. Disponibilidad del mini mercado para atender a los Precondiciones clientes. Flujo Principal Realizar compra Subflujo S-1 acceder almacén
Excepciones Caso de uso Actor Tipo
S-2 seleccionar producto S-3 dirigirse a caja S-4 pagar producto S-5 reclama factura compra S-6 salir E-1 no pago de producto E-2 no registrado como cliente con crédito Cajero
Cajero Inclusión Realiza registro de venta, cobra, imprime y entrega la Propósito factura al cliente. Interactúa con la aplicación, realiza registro de Resumen productos en la ficha venta, hace el cobro respectivo, imprime y entrega la factura al cliente. Disponibilidad del mini mercado para atender a los Precondiciones clientes, sistema debe estar operativo. Flujo Principal Registra venta S-1 enciende terminal S-2 realiza logueo en sistema S-3 activa ficha venta Subflujo S-4 registra producto S-5 genera factura S-6 salir Excepciones E-1 no pago de producto, cancela venta
Caso de uso Actor Tipo Propósito
Administrador o Propietario Administrador Inclusión Realiza consultas e informes en el sistema Interactúa con la aplicación, realiza consultas de Resumen estado de mercancías, cantidades, estado de ventas, realiza pedidos a proveedores. Disponibilidad del mini mercado para atender a los Precondiciones clientes, sistema debe estar operativo. Flujo Principal Realiza consultas S-1 enciende terminal S-2 realiza logueo en sistema S-3 activa ficha consultas Subflujo S-4 registra criterios de consulta S-5 genera consulta S-6 salir E-1 no funciona el sistema Excepciones E-2 no hay acceso por credenciales
Caso de uso Actor Tipo Propósito
Secretaria Secretaria Inclusión Realiza registro de productos en el sistema
Interactúa con la aplicación, realiza registro mercancías al inventario registrando el valor Resumen compra, nombre, cantidad del producto, unidad medida. Disponibilidad del sistema para realizar ingreso Precondiciones mercancías, sistema debe estar operativo. Flujo Principal Realiza ingreso de productos S-1 enciende terminal S-2 realiza logueo en sistema S-3 activa ficha ingreso Subflujo S-4 registra producto con datos solicitados S-5 confirma registro S-6 salir E-1 no funciona el sistema Excepciones E-2 no hay acceso por credenciales Caso de uso Actor Tipo
Contador
Caso de uso Actor Tipo
Manto
de de de de
Contador Inclusión Realiza actividad de contabilización, genera informes Propósito en el sistema Interactúa con la aplicación, realiza actividades de Resumen contabilización, genera informes a la administración del Surtimax. Disponibilidad del sistema para realizar operaciones Precondiciones contables y generar informes, sistema debe estar operativo. Flujo Principal Realiza contabilización S-1 enciende terminal S-2 realiza logueo en sistema S-3 activa ficha contabilidad S-4 registra datos contables Subflujo S-5 confirma registro S-6 verifica estado de mercancías, disponibilidad de inventarios. S-7 salir E-1 no funciona el sistema Excepciones E-2 no hay acceso por credenciales Manto Inclusión Realiza actividad de mantenimiento y actualización Propósito de la aplicación Interactúa con la aplicación, realiza actividades de Resumen mantenimiento y actualización a la aplicación pretendiendo el mejoramiento de la misma. Disponibilidad del sistema para ejecutar Precondiciones mantenimiento y actualizaciones del mismo Flujo Principal Realiza manto
Subflujo
Excepciones
S-1 enciende terminal S-2 realiza logueo en sistema como administrador S-3 activa ficha manto S-4Genera copia de respaldo del sistema S-5 realiza actividades de mantenimiento S-6 verifica condiciones del sistema luego del mantenimiento o actualización S-7 verifica estado y disponibilidad a usuarios del sistema S-8 salir E-1 no funciona el sistema E-2 no hay acceso por credenciales
Completar documentación del análisis de requisitos. Requisitos no Funcionales
-
Comportablidad. El sistema permite realizar pruebas de funcionalidad verificando así su comportamiento, el sistema es de uso en red local o en línea.
-
Capacidad de almacenamiento. El sistema presenta buena capacidad de almacenamiento de datos.
-
Disponibilidad. La disponibilidad en que está operativo el sistema y dispuesto a responder solicitudes a los clientes.
-
Extensibilidad. La aplicación permite la implementación de módulos y así mejorar su crecimiento.
-
Escalabilidad. El sistema está capacitado para manejar una carga creciente de trabajo, cuantos usuarios permite simultáneamente.
-
Mantenibilidad. El sistema presenta facilidad de darle mantenimiento, corregir defectos.
-
Seguridad. Grado de seguridad que presenta la aplicación para con los datos, daños o pérdidas por manipulación indebida.
-
Usabilidad. Grado de facilidad de uso de la aplicación, que tan fácil es aprender a operar la aplicación, existe manual de uso para el usuario.
-
Plataforma física. Es necesario para el funcionamiento de la aplicación tener plataforma S.O. Windows 7 o superior, hardware con procesadores
de 1.5Ghz de velocidad de reloj o superiores, mínimo 4Gb de memoria RAM, y espacio disponible de almacenamiento en disco mínimo 500Gb, se requieren de sistemas de impresión POST en las terminales determinadas para la atención a clientes, red LAN que permita la interconexión de las terminales con el servidor de aplicación.
Referencias Bibliográficas
Franco A. (Enero 2000), Conceptos básicos de la Programación Orientada a Objetos, 8 De Febrero 2018 Recuperado de: http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clases1/clases.htm
Cristian David Henao H. Ingeniero de Sistemas y Computación (Universidad del Quindío - Colombia)
http://codejavu.blogspot.com.co/2013/09/componentes-java-swing.html http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clases1/clases.htm http://codigoprogramacion.com/cursos/java/87-curso-javautilizando-metodos-en java.html#.Wn0XSXy1vIU Weitzenfeld, A. (2005). Programación Orientada a Objetos con Java. In Ingeniería de Software Orientada a Objetos con UML, Java e Internet (p. [129]). Mexico City: Cengage Learning. Recuperado de: http://bibliotecavirtual.unad.edu.co:2081/ps/i.do?p=GVRL&sw=w&u=unad&v=2.1&i t=r&id=GALE%7CCX3004300041&asid=320ab4f95cd384a1b4ef75c7eb74faf8 Es.wikibooks.org. (2018). Programación en Java/Encapsulamiento - Wikilibros. [online] Available at: https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Java/Encapsulamiento [Accessed 09 Feb. 2018]. Jarroba. (2018). Polimorfismo en Java (Parte I), con ejemplos - Jarroba. [online] Available at: https://jarroba.com/polimorfismo-en-java-parte-i-con-ejemplos/ [Accessed 11 Feb. 2018]. http://www.ciberaula.com/articulo/ventajas_poo