domingo, 30 de octubre de 2011

Ejercicio Heurísticas de diseño.

En este ejercicio vamos a ver unos ejemplos de como se rompe la heurística en el diseño de interfaces gráficas, así como proponer una interfaz mejor.


Ejemplo 1.
En este ejemplo, podemos tener dos errores, el primero me da la opción de poner mi edad, sin embargo esto puede ser poco viable, ya que puedo teclear letras en lugar de números, el segundo error yo puedo seleccionar las dos opciones, cuando en verdad solo debemos de seleccionar una, para evitar confusiones.






Ejemplo 2.
En este ejemplo el único error que veo es la combinación de colores de la ventana y del texto, ya que para el usuario va a ser un poco molesto estar leyendo con esa combinación, para lo cual considero que hay que cambiar esa combinación.


Ejemplo 3.
En este ejemplo, es un software de impresión, rompe con la heurística de metáfora, ya que utiliza botones que son propios de un reproductor de música, aparte de que el botón rewind no tiene porque estar.



Referencias:
http://homepage.mac.com/bradster/iarchitect/shame.htm

jueves, 27 de octubre de 2011

Herencia.

Los posibles casos de herencia en mi proyecto podrían ser que utilizó el mismo código para lo que es la creación de botones, así como la implementación de los ActionListeners.
Aparte no estoy utilizando la clase JFrame directamente para crear lo que es la ventana de la calculadora, sino que la estoy heredando

Retroalimentación en clase.

En clases pasadas, comentamos en parejas lo que elegimos cada uno como proyecto, en mi caso, le comente a mi compañero Mario que lo que yo tenía pensado hacer para proyecto tanto en la clase como en el taller era una calculadora cientifica, ya que no me gusta programar cosas que no le veo una aplicación al mundo real, pero para llegar a esto, primero quería hacer la calculadora básica para basarme de ese código y poder desarrollar la cientifica.
El por su parte, me dijo que tenía pensado hacer el famoso juego de Tetris, pero que aún no sabía muy bien como poder diseñarlo e implementarlo, a lo cual yo le comente que ya había escuchado por parte de mi compañera Anais, que ella iba a hacer el mismo proyecto tanto en el taller como en la clase, y que ella ya había comenzado a hacer el proyecto.
También me dijo, mas o menos lo que debía de llevar mi calculadora, como lo que son las ventanas, los botones, así como los ActionListeners para los botones.

Interfaz gráfica.

Esta es la interfaz gráfica de mi proyecto, tenemos dos bloques, el del lado izquierdo es el bloque que contiene los botones numéricos y los de operaciones, los del lado derecho son los botones que contienen las funciones trigonométricas mas conocidas (seno, coseno y tangente) así como los botones de raíz cuadrada, pi (3.1416) y el botón de borrar. En la parte de arriba se muestra el título de la ventana y el botón cerrar.
La interfaz gráfica la hice con las herramientas de Power Point.

Eventos, errores y excepciones.

Eventos.
Componente gráfico generador
Tipo de evento
Acción que se dispara
Botón numérico
Oprimir
Aparece el número en la pantalla.
Botón de operación
Oprimir
Una vez oprimido un botón numérico, se oprime un botón de operación (+, -, *, /, sin, cos) y luego otro numérico para llegar a un resultado.
Botón clear
Oprimir
Limpia la pantalla.
Botón cerrar
Oprimir
Cierra la ventana


Errores y excepciones.

Modo en que se genera
Manejo
Se le da una letra en lugar de un número
No permitir operaciones si se da un carácter invalido
División entre cero
Denegar la operación.

Patrones de diseño.

El patrón de diseño aplicable a mi proyecto es el Modelo Vista Controlador, es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario y la lógica de negocio en tres componentes distintos:


Modelo: Hacer las operaciones mediante la introducción de números, tales como sumar, restar, multiplicar, dividir, usar las funciones trigonométricas, trigonométricas inversas, calcular el reciproco de un número, borrar los números.


Vista: Sería mi interfaz gráfica, es decir, la distribución que yo le voy a dar a los botones y el cuadro de texto donde van a aparecer los números.


Controlador: Aquí se responde a los eventos que el usuario provoca al interactuar con el software, en mi caso, que es lo que sucede cuando el usuario le da click a los botones numéricos, que sucede si le da click a los botones de operaciones, que es lo que sucede si le da click al botón de borrar.


Referencias:
http://es.wikipedia.org/wiki/Modelo_Vista_Controlador
http://www.fdi.ucm.es/profesor/jpavon/poo/2.14.MVC.pdf

Diagramas de secuencia.

Diagrama de secuencia para el caso sumar:

Diagrama de secuencia para el caso restar:

Diagrama de secuencia para el caso dividir (fallido - división entre cero):

Referencias:

martes, 25 de octubre de 2011

Patrones de diseño.

Eventos y excepciones.

Estas son las posibles excepciones que se generan en mi proyecto:


import java.io.*;

public class Excepcion {
public static void main(String args[]) throws IOException  {

try {

  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

  int n1, n2, n;
  System.out.print("Da un numero: ");
  n1 = Integer.parseInt(in.readLine());
  System.out.print("Da otro numero: ");
  n2 = Integer.parseInt(in.readLine());
  System.out.print("La division = " + n1/n2);
 }

 catch (NumberFormatException nfe) {
  System.out.println("Numero invalido " + nfe.toString());
 }
 catch (ArithmeticException ae) {
  System.out.println("Division invalida " + ae.toString());
 }
}
}
Aquí se muestra como funciona:

Con respecto a los eventos tenemos los siguientes:
1. Cuando oprimimos el botón cerrar.



addWindowListener(new WindowAdapter()
      {
         public void windowClosing(WindowEvent e)
            {
               Calc.this.dispose();
               System.runFinalization();
               System.gc();
               System.exit(0);
            }
      });

2. Cuando oprimimos cualquier botón.



       jb_one.addActionListener(Calc.this);
       jb_two.addActionListener(Calc.this);
       jb_three.addActionListener(Calc.this);
       jb_four.addActionListener(Calc.this);
       jb_five.addActionListener(Calc.this);
       jb_six.addActionListener(Calc.this);
       jb_seven.addActionListener(Calc.this);
       jb_eight.addActionListener(Calc.this);
       jb_nine.addActionListener(Calc.this);
       jb_zero.addActionListener(Calc.this);
       jb_plus.addActionListener(Calc.this);
       jb_minus.addActionListener(Calc.this);
       jb_divide.addActionListener(Calc.this);
       jb_multiply.addActionListener(Calc.this);
       jb_sin.addActionListener(Calc.this);
       jb_cos.addActionListener(Calc.this);
       jb_tan.addActionListener(Calc.this);
       jb_asin.addActionListener(Calc.this);
       jb_acos.addActionListener(Calc.this);
       jb_atan.addActionListener(Calc.this);
       jb_pie.addActionListener(Calc.this);
       jb_E.addActionListener(Calc.this);
       jb_decimalpoint.addActionListener(Calc.this);
       jb_equalto.addActionListener(Calc.this);
       jb_fact.addActionListener(Calc.this);
       jb_power.addActionListener(Calc.this);
       jb_changesign.addActionListener(Calc.this);
       jb_reciporcal.addActionListener(Calc.this);
       jb_todeg.addActionListener(Calc.this);
       jb_torad.addActionListener(Calc.this);
       jb_round.addActionListener(Calc.this);
       jb_CA.addActionListener(Calc.this);
       jb_CE.addActionListener(Calc.this);

Interfaz gráfica.

Esta será la interfaz gráfica para mi proyecto final:



jueves, 20 de octubre de 2011

Diagrama de clases.

Un diagrama de clases es un diagrama que muestra las relaciones entre las clases que involucran un sistema, las cuales pueden ser asociativas, de herencia, de uso y de contenimiento.
Un diagrama de clases está compuesto por los siguientes elementos:
  • Clases: atributos, métodos y visibilidad.
  • Relaciones: asociativas, de herencia, de uso, de contenimiento.
Elementos.

Clases.
Es la unidad básica que encapsula toda la información de un objeto (un objeto es la instancia de una clase). A través de ella podemos modelar el entorno en estudio.
En UML una clase está representada por un rectángulo que presenta tres divisiones:


  • En la primera división se encuentra el nombre de la clase.
  • En la segunda división van los atributos y sus visibilidades.
  • En la tercera división van los métodos y sus visibilidades.
Atributos y métodos.
Los atributos son las caracteristicas de la clase, pueden ser de tres tipos:
  • Public (+): Indica que el atributo es visible dentro y fuera de la clase.
  • Private (-): Indica que el atributo solo es visible desde dentro de la clase.
  • Protected (#): Indica que el atributo no podra ser accesible desde fuera de la clase, pero si puede ser accesado por métodos de la clase o subclases.
Los métodos son las operaciones de una clase, pueden ser de tres tipos:

  • Public (+): Indica que el método es visible dentro y fuera de la clase.
  • Private (-): Indica que el método solo es visible desde dentro de la clase.
  • Protected (#): Indica que el método no podra ser accesible desde fuera de la clase, pero si puede ser accesado por métodos de la clase o subclases.
Relaciones entre clases.
Cardinalidad: Indica el grado y nivel de dependencia, se anotan en cada extremo de las relaciones, estas pueden ser:
  • Uno a muchos(1..*)
  • 0 a muchos(0..*)
  • Número fijo.
Relación de herencia.
Indica que una subclase hereda los métodos y atributos especificados por una Super Clase, por ende la Subclase además de poseer sus propios métodos y atributos, poseerá las características y atributos visibles de la Super Clase.

Relación de agregación.
Para modelar objetos complejos, n bastan los tipos de datos básicos que proveen los lenguajes: enteros, reales y secuencias de caracteres. Cuando se requiere componer objetos que son instancias de clases definidas por el desarrollador de la aplicación, tenemos dos posibilidades:
  • Por Valor: Es un tipo de relación estática, en donde el tiempo de vida del objeto incluido esta condicionado por el tiempo de vida del que lo incluye. Este tipo de relación es comunmente llamada Composición (el Objeto base se contruye a partir del objeto incluido, es decir, es "parte/todo").
  • Por Referencia: Es un tipo de relación dinámica, en donde el tiempo de vida del objeto incluido es independiente del que lo incluye. Este tipo de relación es comunmente llamada Agregación (el objeto base utiliza al incluido para su funcionamiento).
Relación de asociación.
La relación entre clases conocida como Asociación, permite asociar objetos que colaboran entre si. Cabe destacar que no es una relación fuerte, es decir, el tiempo de vida de un objeto no depende del otro.

Relación de dependencia o instanción (uso).
Representa un tipo de relación muy particular, en la que una clase es instanciada (su instanciación es dependiente de otro objeto/clase). Se denota por una flecha punteada.
El uso más particular de este tipo de relación es para denotar la dependencia que tiene una clase de otra, como por ejemplo una aplicación grafica que instancia una ventana.


Para realizar el diagrama de clases de mi proyecto es necesario que utilice el SO Ubuntu, y el software Umbrello.


Este es el diagrama de clases de mi proyecto, es algo pequeño porque solo implemento dos clases.


Referencias:

Documentación técnica.

La documentación de los programas es un aspecto sumamente importante, tanto en el desarrollo de la aplicación como en el mantenimiento de la misma. Mucha gente no hace este parte del desarrollo y no se da cuenta de que pierde la posibilidad de la reutilización de parte del programa en otras aplicaciones.
La documentación de un programa empieza a la vez que la construcción del mismo y finaliza justo antes de la entrega del programa o aplicación al cliente. Así mismo, la documentación que se entrega al cliente tendrá que coincidir con la versión final de los programas que componen la aplicación.
Tipos de documentación.

La documentación se divide en dos categorias: interna y externa.
  • Interna: Es aquella que se crea en el mismo código, en forma de comentarios o de archivos de información dentro de la misma aplicación.
  • Externa: Es la que se escribe en cuadernillos o libros, totalmente ajena a la aplicación en sí.
Una vez concluido el programa, los documentos que se deben entregar son una guía técnica, una guía de uso y de instalación.

Guía técnica.
Tambiérn llamado manual técnico, aquí se reflejan el diseño del proyecto , la codificación de la aplicación y las prueba realizadas para su correcto funcionamiento. Por lo general este apartado está reservado para personas que tienen conocimiento en informatica como los programadores. Su principal objetivo es es facilitar el desarrollo, corrección y futuro mantenimiento  de la aplicación. Está compuesto por tres apartados:
  • Cuaderno de carga: Se refleja la solución o diseño de la aplicación, está diseñado únicamente para programadores.
  • Programa fuente: Es donde se incluye la codificación realizada por los programadores. Debe de ser claro para su comprensión así como para un futuro mantenimiento y desarrollo.
  • Pruebas: Es donde se específican el tipo de pruebas que se realizarón durante todo el proyecto así como los resultados obtenidos.
Guía de uso.
Es a lo que comunmente se le llama manual de usuario, contiene información para que el usuario utilice correctamente la aplicación. Sale de la guía técnica, solo que se suprimen los tecnisismos para que el usuario (generalmente no experto en informática) pueda entender el documento. En el caso en el que sea necesario incluir algún tecnisismo, es necesario poner al final de dicha guía un glosario para su mejor compresión.

Guía de instalación.
Es la guía que contiene la información para la implementación de la aplicación. Dentro de este documento se encuentran las instrucciones para la puesta en marcha del sistema y las normas de utilización de éste. Dentro de las normas de utilización se encuentran las normas de seguridad, tantoa las físicas como las de acceso a la información.




Javadoc.
Javadoc es una herramienta de Sun para documentar el código mediante comentarios, pero a la vez provee una herramienta que permite extraer esa documentación de forma que sea útil para el usuario de la misma.
Básicamente javadoc es un programa, que toma lo comentarios que se colocan en el código con marcas especiales y construye un archivo HTML con clases, métodos y la documentación que corresponde. Este HTML tiene el formato de toda la documentación estándar de Java provista por Sun.
La documentación a ser utilizada por javadoc se escribe en comentarios que comienzan con /** (notar el doble *) y que terminan con */. A la vez, dentro de estos comentarios se puede escribir código HTML y operadores para que interprete javadoc (generalmente precedidos por @).

Para generar la documentación técnica de mi proyecto, utilizare javadoc, ya que el lenguaje de programación que estoy utilizando es java.

Referencias:
http://www.desarrolloweb.com/articulos/importancia-documentacion.html
http://luauf.com/2008/06/17/documentando-con-javadoc/
http://gpd.sip.ucm.es/rafa/docencia/programacion/tema1/javadoc.html

jueves, 13 de octubre de 2011

Demo 1

Este es el primer demo que presente en la clase. Como habia dicho anteriormente el principal objetivo que yo tenía para medio curso, era realizar una calculadora con las cuatro operaciones básicas. El código es el siguiente:
public class interfaz extends javax.swing.JFrame {

    float var1,var2;
    boolean suma,resta,mult,div;
    public interfaz() {
        initComponents();
 //se declara como falso porque aun no se hace ninguna operacion
        suma=false;
        resta=false;
        mult=false;
        div=false;
    }
 
    private void initComponents() {

        textoRESULTADO = new javax.swing.JTextField();
        numero1 = new javax.swing.JButton();
        numero2 = new javax.swing.JButton();
        numero3 = new javax.swing.JButton();
        numero6 = new javax.swing.JButton();
        numero5 = new javax.swing.JButton();
        numero4 = new javax.swing.JButton();
        numero9 = new javax.swing.JButton();
        numero8 = new javax.swing.JButton();
        numero7 = new javax.swing.JButton();
        numero0 = new javax.swing.JButton();
        botonIGUAL = new javax.swing.JButton();
        botonSUMAR = new javax.swing.JButton();
        botonRESTAR = new javax.swing.JButton();
        botonDIV = new javax.swing.JButton();
        botonMULT = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        botonLIMPIAR = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  
  setTitle("Calculadora de Eduardo");
  
        numero1.setText("1");
        numero1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero1ActionPerformed(evt);
            }
        });

        numero2.setText("2");
        numero2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero2ActionPerformed(evt);
            }
        });

        numero3.setText("3");
        numero3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero3ActionPerformed(evt);
            }
        });

        numero6.setText("6");
        numero6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero6ActionPerformed(evt);
            }
        });

        numero5.setText("5");
        numero5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero5ActionPerformed(evt);
            }
        });

        numero4.setText("4");
        numero4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero4ActionPerformed(evt);
            }
        });

        numero9.setText("9");
        numero9.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero9ActionPerformed(evt);
            }
        });

        numero8.setText("8");
        numero8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero8ActionPerformed(evt);
            }
        });

        numero7.setText("7");
        numero7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero7ActionPerformed(evt);
            }
        });

        numero0.setText("0");
        numero0.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                numero0ActionPerformed(evt);
            }
        });

        botonIGUAL.setText("=");
        botonIGUAL.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonIGUALActionPerformed(evt);
            }
        });

        botonSUMAR.setText("+");
        botonSUMAR.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSUMARActionPerformed(evt);
            }
        });

        botonRESTAR.setText("-");
        botonRESTAR.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonRESTARActionPerformed(evt);
            }
        });

        botonDIV.setText("/");
        botonDIV.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonDIVActionPerformed(evt);
            }
        });

        botonMULT.setText("*");
        botonMULT.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonMULTActionPerformed(evt);
            }
        });

        

        botonLIMPIAR.setText("clear");
        botonLIMPIAR.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonLIMPIARActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(22, 22, 22)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(botonLIMPIAR))
                    .addComponent(textoRESULTADO, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(numero4, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(numero5, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(numero6, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(numero7, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(numero8, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(numero9, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(numero0, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(numero1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(numero2, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(numero3, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(botonIGUAL, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(botonRESTAR, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(botonSUMAR, javax.swing.GroupLayout.DEFAULT_SIZE, 73, Short.MAX_VALUE)
                            .addComponent(botonDIV, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(botonMULT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addContainerGap(22, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(botonLIMPIAR))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(textoRESULTADO, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(numero7)
                    .addComponent(numero8)
                    .addComponent(numero9)
                    .addComponent(botonSUMAR))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(numero4)
                    .addComponent(numero5)
                    .addComponent(numero6)
                    .addComponent(botonRESTAR))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(numero1)
                    .addComponent(numero2)
                    .addComponent(numero3)
                    .addComponent(botonDIV))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(numero0)
                    .addComponent(botonIGUAL)
                    .addComponent(botonMULT))
                .addContainerGap())
        );

        pack();
    }

    private void numero0ActionPerformed(java.awt.event.ActionEvent evt) {

        if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("0");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("0"));
        var1=Float.parseFloat(textoRESULTADO.getText());
    }//GEN-LAST:event_numero0ActionPerformed

    private void numero1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numero1ActionPerformed

          if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("1");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("1"));//concatena el numero en la barra
        //asigna a la variable el valor numerico de la caja de texto, convierte de String a float
        var1=Float.parseFloat(textoRESULTADO.getText());
    }//GEN-LAST:event_numero1ActionPerformed

    private void numero2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numero2ActionPerformed

        if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("2");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("2"));//concatena el numero en la barra
        //asigna a la variable el valor numerico de la caja de texto, convierte de String a float
        var1=Float.parseFloat(textoRESULTADO.getText());

    }//GEN-LAST:event_numero2ActionPerformed

    private void numero3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numero3ActionPerformed

          if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("3");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("3"));//concatena el numero en la barra
        //asigna a la variable el valor numerico de la caja de texto, convierte de String a float
        var1=Float.parseFloat(textoRESULTADO.getText());

    }//GEN-LAST:event_numero3ActionPerformed

    private void botonSUMARActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSUMARActionPerformed
    //Este es el boton de SUMA por lo tanto la operacion suma es verdadera
        this.suma=true;
        this.textoRESULTADO.setText("");
        var2=var1;
        // TODO add your handling code here:
    }//GEN-LAST:event_botonSUMARActionPerformed

    private void botonIGUALActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonIGUALActionPerformed

        //este es el boton IGUAL, dependiendo de la operacion verdadera pendiente, se hara la operacion
        if(suma)
        {
            //se inserta en la caja de texto el valor String para la suma de la variable 1 y 2
            this.textoRESULTADO.setText(String.valueOf(var1+var2));
            var1=var2+var1;//la variable 1 es el resultado de la operacion anterior, para poder realizar futuras operaciones
            suma=false;//se ha realizado la operacion por lo tanto este valor vuelve a ser falso para evitar conflictos

        }
        //continuamos de la misma forma ocn las demas operaciones
        if(resta)
        {
            //se inserta en la caja de texto el valor String para la suma de la variable 1 y 2
            this.textoRESULTADO.setText(String.valueOf(var2-var1));
            var1=var2-var1;//la variable 1 es el resultado de la operacion anterior, para poder realizar futuras operaciones
            resta=false;//se ha realizado la operacion por lo tanto este valor vuelve a ser falso para evitar conflictos

        }
        if(mult)
        {
            //se inserta en la caja de texto el valor String para la suma de la variable 1 y 2
            this.textoRESULTADO.setText(String.valueOf(var2*var1));
            var1=var2*var1;//la variable 1 es el resultado de la operacion anterior, para poder realizar futuras operaciones
            mult=false;//se ha realizado la operacion por lo tanto este valor vuelve a ser falso para evitar conflictos

        }
        if(div)
        {
            //se inserta en la caja de texto el valor String para la suma de la variable 1 y 2
            this.textoRESULTADO.setText(String.valueOf(var2/var1));
            var1=var2/var1;//la variable 1 es el resultado de la operacion anterior, para poder realizar futuras operaciones
            div=false;//se ha realizado la operacion por lo tanto este valor vuelve a ser falso para evitar conflictos

        }
    }//GEN-LAST:event_botonIGUALActionPerformed

    private void botonRESTARActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonRESTARActionPerformed

            this.resta=true;
            this.textoRESULTADO.setText("");
            var2=var1;
// TODO add your handling code here:
    }//GEN-LAST:event_botonRESTARActionPerformed

    private void botonDIVActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonDIVActionPerformed

        this.div=true;
        this.textoRESULTADO.setText("");
        var2=var1;// TODO add your handling code here:
    }//GEN-LAST:event_botonDIVActionPerformed

    private void botonMULTActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonMULTActionPerformed

        this.mult=true;
        this.textoRESULTADO.setText("");
        var2=var1;// TODO add your handling code here:
    }//GEN-LAST:event_botonMULTActionPerformed

    private void botonLIMPIARActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonLIMPIARActionPerformed

        //botton de CLEAR o LIMPIAR
        this.textoRESULTADO.setText("0");
        var1=0;
        var2=0;
        mult=false;
        div=false;
        suma=false;
        resta=false;
        // TODO add your handling code here:
    }//GEN-LAST:event_botonLIMPIARActionPerformed

    private void numero4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numero4ActionPerformed
  if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("4");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("4"));//concatena el numero en la barra
        //asigna a la variable el valor numerico de la caja de texto, convierte de String a float
        var1=Float.parseFloat(textoRESULTADO.getText());        // TODO add your handling code here:
    }//GEN-LAST:event_numero4ActionPerformed

    private void numero5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numero5ActionPerformed
        // TODO add your handling code here:
          if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("5");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("5"));//concatena el numero en la barra
        //asigna a la variable el valor numerico de la caja de texto, convierte de String a float
        var1=Float.parseFloat(textoRESULTADO.getText());
    }//GEN-LAST:event_numero5ActionPerformed

    private void numero6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numero6ActionPerformed
        // TODO add your handling code here:
          if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("6");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("6"));//concatena el numero en la barra
        //asigna a la variable el valor numerico de la caja de texto, convierte de String a float
        var1=Float.parseFloat(textoRESULTADO.getText());
    }//GEN-LAST:event_numero6ActionPerformed

    private void numero7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numero7ActionPerformed

          if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("7");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("7"));//concatena el numero en la barra
        //asigna a la variable el valor numerico de la caja de texto, convierte de String a float
        var1=Float.parseFloat(textoRESULTADO.getText());
        // TODO add your handling code here:
    }//GEN-LAST:event_numero7ActionPerformed

    private void numero8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numero8ActionPerformed
        // TODO add your handling code here:
          if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("8");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("8"));//concatena el numero en la barra
        //asigna a la variable el valor numerico de la caja de texto, convierte de String a float
        var1=Float.parseFloat(textoRESULTADO.getText());
    }//GEN-LAST:event_numero8ActionPerformed

    private void numero9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numero9ActionPerformed

          if(textoRESULTADO.equals("0") || textoRESULTADO.equals(""))
            textoRESULTADO.setText("9");
        else
            textoRESULTADO.setText(textoRESULTADO.getText().concat("9"));//concatena el numero en la barra
        //asigna a la variable el valor numerico de la caja de texto, convierte de String a float
        var1=Float.parseFloat(textoRESULTADO.getText());// TODO add your handling code here:
    }//GEN-LAST:event_numero9ActionPerformed

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new interfaz().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonDIV;
    private javax.swing.JButton botonIGUAL;
    private javax.swing.JButton botonLIMPIAR;
    private javax.swing.JButton botonMULT;
    private javax.swing.JButton botonRESTAR;
    private javax.swing.JButton botonSUMAR;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JButton numero0;
    private javax.swing.JButton numero1;
    private javax.swing.JButton numero2;
    private javax.swing.JButton numero3;
    private javax.swing.JButton numero4;
    private javax.swing.JButton numero5;
    private javax.swing.JButton numero6;
    private javax.swing.JButton numero7;
    private javax.swing.JButton numero8;
    private javax.swing.JButton numero9;
    private javax.swing.JTextField textoRESULTADO;
    // End of variables declaration//GEN-END:variables

}
Las imágenes de mi demo:

Autogeneración de código.

Esta es la autogenración de código, que salio de mi diagrama de clases:


/**
 * Class Calculadora
 */
public class Calculadora{
  //
  // Fields
  //
  //
  // Constructors
  //
  public Calculadora () { };
  //
  // Methods
  //
  //
  // Accessor methods
  //
  //
  // Other methods
  //
  /**
   */
  public void IntroducirNumeros(  )
  {
  }
  /**
   */
  public void Sumar(  )
  {
  }
  /**
   */
  public void Restar(  )
  {
  }
  /**
   */
  public void Multiplicar(  )
  {
  }
  /**
   */
  public void Dividir(  )
  {
  }
 /**
   */
  public void CalcularResultado(  )
  {
  }
  /**
   */
  public void BorrarPantalla(  )
  {
  }
}

/**
 * Class Botones
 */
public class Botones {
  //
  // Fields
  //
  private void Tamaño;
  private void Distribución;
  //
  // Constructors
  //
  public Botones () { };
  //
  // Methods
  //
  //
  // Accessor methods
  //
  /**
   * Set the value of Tamaño
   * @param newVar the new value of Tamaño
   */
  private void setTamaño ( void newVar ) {
    Tamaño = newVar;
  }
  /**
   * Get the value of Tamaño
   * @return the value of Tamaño
   */
  private void getTamaño ( ) {
    return Tamaño;
  }
  /**
   * Set the value of Distribución
   * @param newVar the new value of Distribución
   */
  private void setDistribución ( void newVar ) {
    Distribución = newVar;
  }
  /**
   * Get the value of Distribución
   * @return the value of Distribución
   */
  private void getDistribución ( ) {
    return Distribución;
  }
  //
  // Other methods
  //
  /**
   */
  public void Oprimir(  )
  {
  }
}

Si comparamos este código con el código original, nos podemos dar cuenta que ciertas cosas se parecen, pero en si, difiere mucho del código original.

Documentación técnica.

Esta es la documentacíón técinica que surgió de el primer demo de mi proyecto:


Herencia

Estos son los posibles casos de herencia de mi proyecto:

En este caso, estamos creando lo que son los botones, así como la implementación de de los Action Listeners, se utiliza el mismo código para cada uno de los botones, tanto para los números como para los botones que haran las operaciones aritmeticas.






La segunda relación de herencia que detecte en mi proyecto es la manera en la cual se van a organizar los botones en el panel que cree, aparte de sus distribución, es exactamente el mismo código que se va a utilizar al igual que en la parte anterior.