You are on page 1of 31

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 en
una clase
Estructura secuencial, las Procedimientos separados y sin
instrucciones se ejecutan una relación
después de la otra
Uso de condicionales para 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 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
Convención Ejemplo
identificador
String,
nombre de una Comienza por letra
Rectangulo,
clase mayúscula
CinematicaApplet
calcularArea,
comienza con letra
nombre de función getValue,
minúscula
setColor
comienza por letra área, color,
nombre de variable
minúscula appletSize
nombre de
En letras mayúsculas PI, MAX_ANCHO
constante

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 permite 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 Clase D Clase C


----------------------------- -------------------------------------------- -------------------------------
dorsal: integer Id federacion: integer titulacion: String
demarcacion: String aniosExperiencia: integer
planificarEntrenamiento(): void
entrevista(): void --------------------------------
darMasaje(): void

Clase E
---------------------------------
Id: integer
pasarInstrumentos: String

auxiliar(): void

Dónde: 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.

2.11 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 debe 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 clase 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 usan 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
realiza un procedimiento, por lo que se declara como "void" seguido
20
del
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 }

2.15 Qué función tiene el paquete Swing en Java y describa sus principales
características.

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 de 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.
2.16 Consultar la estructura y sintaxis de cómo funcionan las excepciones
en Java.

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 Cliente


Actor Cliente
Tipo Inclusión
Propósito 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
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
Excepciones
E-2 no registrado como cliente con crédito

Caso de uso Cajero


Actor Cajero
Tipo 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 Administrador o Propietario


Actor Administrador
Tipo Inclusión
Propósito 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 Secretaria


Actor Secretaria
Tipo Inclusión
Propósito Realiza registro de productos en el sistema
Interactúa con la aplicación, realiza registro de
mercancías al inventario registrando el valor de
Resumen
compra, nombre, cantidad del producto, unidad de
medida.
Disponibilidad del sistema para realizar ingreso de
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 Contador


Actor Contador
Tipo 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

Caso de uso Manto


Actor Manto
Tipo 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
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
Subflujo
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
Excepciones
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. InIngenierí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
http://www.pmoinformatica.com/2013/01/requerimientos-no-funcionales-
porque.html

https://www.ctr.unican.es/asignaturas/Ingenieria_Software_4_F/Doc/M3_08_Espec
ificacion-2011.pdf

https://users.dcc.uchile.cl/~lmateu/Java/Apuntes/tiposprim.htm