viernes, 22 de junio de 2012

Unidad IV. POLIMORFISMO Otro concepto de la OOP es el polimorfismo. Un objeto solamente tiene una forma (la que se le asigna cuando se construye ese objeto) pero la referencia a objeto es polimórfica porque puede referirse a objetos de diferentes clases (es decir, la referencia toma múltiples formas). Para que esto sea posible debe haber una relación de herencia entre esas clases. Por ejemplo, considerando la figura anterior de herencia se tiene que: 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 C 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 D. Una referencia a un objeto de la clase E también puede ser una referencia a un objeto de la clase A.


    Otro concepto de la POO es el polimorfismo. Un objeto solamente tiene una forma (la que se le asigna cuando se construye ese objeto) pero la referencia a objeto es polimórfica porque puede referirse a objetos de diferentes clases (es decir, la referencia toma múltiples formas). Para que esto sea posible debe haber una relación de herencia entre esas clases. Por ejemplo, considerando la figura anterior de herencia se tiene que:


    • 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 C 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 D.
    • Una referencia a un objeto de la clase E también puede ser una referencia a un objeto de la clase A.

3.1 Clasificacion de Herencia

La Herencia Simple indica que podemos definir n clases nuevas a partir de una clase padre o clase inicial.

Mientras que la herencia Múltiple indica que se pueden definir n clases nuevas a partir de varias clases padres o iniciales.

Si comparamos ambas formas de Herencia notamos que el diseño propio del lenguaje Java, imposibilita pensar el diseño de un programa aplicando herencia múltiple, sin embargo dicho concepto se podría aplicar por ejemplo en C++, donde con muha frecuencia se hace un uso indebido de las relaciones de herencia múltiple, lo cual hace que el mismo pierda integridad. En Java esto no ocurre, ya que no ofrece soporte para este tipo de relaciones.
Java permite únicamente Herencia Simple, es decir, las clases sólo podrán Heredar de una única clase padre, o superclase.
El truco de la Herencia en Java es que se reutiliza código creando nuevas clases, pero en vez de crearlas de la nada, se utilizan clases ya existentes (que otra persona ya ha construido y depurado). La gracia es usar clases sin manchar el código existente.
Para lograr la reutilización de código, ya vimos el semestre anterior el concepto de colaboración de clases, donde creamos objetos de las clases ya existentes, pero dentro de clases nuevas. A esto se le conoce como colaboración de clases o composición. Acá simplemente se está reutilizando la funcionalidad del código, no su forma. Este semestre, sin embargo, veremos una forma un poco más sutil.
Crearemos clases como si fueran un tipo de clase ya existente. Literalmente nos tomaremos la misma forma de la clase ya existente y le agregaremos más fucionalidades específicas, pero sin siquiera tocar la clase ya existente. A este proceso le llamamos Herencia, y finalmente es el compilador de Java quien hace toda la tarea.
La Herencia es uno de los conocimientos clave de la programación orientada a objetos, ya que incluso la misma estructura del Lenguaje Java implementa Herencias de forma implícita. Todo en Java son Herencias.

UNIDAD III. HERENCIA

En orientación a objetos la herencia es, después de la agregación o composición, el mecanismo más utilizado para alcanzar algunos de los objetivos más preciados en el desarrollo de software como lo son la reutilización y la extensibilidad. A través de ella los diseñadores pueden crear nuevas clases partiendo de una clase o de una jerarquía de clases preexistente (ya comprobadas y verificadas) evitando con ello el rediseño, la modificación y verificación de la parte ya implementada. La herencia facilita la creación de objetos a partir de otros ya existentes e implica que una subclase obtiene todo el comportamiento (métodos) y eventualmente los atributos (variables) de su superclase.
Es la relación entre una clase general y otra clase más especifica. Por ejemplo: Si declaramos una clase párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase texto, son automáticamente heredados por la subclase párrafo.
La herencia es uno de los mecanismos de los lenguajes de programación orientada a objetos basados en clases, por medio del cual una clase se deriva de otra de manera que extiende su funcionalidad. La clase de la que se hereda se suele denominar clase base, clase padre, superclase, clase ancestro (el vocabulario que se utiliza suele depender en gran medida del lenguaje de programación).
En los lenguajes que cuentan con un sistema de tipos fuerte y estrictamente restrictivo con el tipo de datos de las variables, la herencia suele ser un requisito fundamental para poder emplear el Polimorfismo, al igual que un mecanismo que permita decidir en tiempo de ejecución qué método debe invocarse en respuesta a la recepción de un mensaje, conocido como enlace tardío (late binding) o enlace dinámico (dynamic binding).

Ejemplo en Java.

public class Mamifero{
    private int patas;
    private String nombre;
    public void imprimirPatas(){
      JOptionPane.showMessageDialog(null," Tiene " + patas + " patas\n","Mamifero",
                                    JOptionPane.INFORMATION_MESSAGE);
    }
    public Mamifero(String nombre, int patas){
      this.nombre = nombre;
      this.patas = patas;
    }
  }
 
  public class Perro extends Mamifero {
    public Perro(String nombre){
      super(nombre, 4);
    }
  }
 
  public class Gato extends Mamifero {
    public Gato(String nombre){
      super(nombre, 4);
    }
  }
 
  public class CrearPerro {
    public static void main(String [] args) {
      Perro perrito = new Perro("Pantaleon");
      perrito.imprimirPatas();   /*Está en la clase mamífero*/
    }
  }

viernes, 23 de marzo de 2012

UNIDAD II CLASES Y OBJETOS

Fecha: Martes 6  y Miercoles 7 de Marzo del 2012
Empezamos ésta unidad  realizando un programa para calcular el área de un circulo. Realizar este programa nos tomó varias clases y solo les voy a poner el código del programa ya terminado.

//trABAJO EN CLASE                   06/03/12   
class Punto
{
    int x,y;
    Punto()//constructor
    {
        x=0;
       y=0;
    }

    Punto(int i, int j)
    {
        x=i;
       y=j;
    }

    //METODOS de la clase
    public void setX(int i)
    {
        x=i;
    }

    public void setY(int j)
    {
        y=j;
    }
   
    public void printPunto()
    {
        System.out.println("("+x+","+y+")");
    }
}

class Circulo
{
    int r;
    Punto p;
    Circulo()
    {
        r=0;
        p=new Punto();
    }
   
    Circulo(int i, int j,int ra)
    {
        r=ra;
        p=new Punto(i,j);
    }

    Circulo(Punto p1, int ra)
    {
        p=p1;
        r=ra;
    }

    //Metodos de la clase
    public void setRadio(int ra)
    {
        r=ra;
    }
   
public void printCirculo()
    {
        System.out.println("circulo: ");
        System.out.println("Radio: "+r);
    }
}

class Circulos
{
    public static void main(String args[])
    {
        Punto p1;
        p1=new Punto();
        Punto p3=new Punto(5,-2);
        p1.printPunto();       
        p3.printPunto();
        p1.setX(4);
        p3.setY(4);
        p1.printPunto();
        p1.printPunto();
        Circulo c1;
        c1=new Circulo();
        c1.printCirculo();
        Circulo c2=new Circulo(4,3,25);
        c2.printCirculo();
        Circulo c3=new Circuloprint(p3,15);
        c3.printCirculo();
    }
}
Fecha: Jueves 8 de Marzo 2012

Este día la clase se trato de crear un programa para calcular el área y perímetro de un triángulo. El primer paso fue dibujar un triángulo en el pizarrón, una vez que dibujamos el triángulo, lo empezamos a definir especificando sus atributos que serián:
  1. Lado 1
  2. Lado 2
  3. Lado 3
  4. Base
  5. Altura
Teniendo estos datos procedimos a crear una clase donde declararamos estas propiedades.

Clase: Una clase es una colección de datos y funciones.

class Triangulo
{
     int b,h,l1,l2,l3;
     float area(int ba, int ha) //Éste es el método de la clase que utilizamos para asignar valores
    {
        b=ba;
        h=ha;
        return (b*h)/2;
    }
}

     Teniendo esta clase ya definida, el profesor dijo que lo que seguía era instanciar la clase, entonces se creó la clase principal desde donde  se instanciará.

     Instanciar: Ëste termino se refiere a crear un objeto de una clase ya definida. En este caso la clase a instanciar se llama Triangulo, que fue la que se hizo anteriormente y el objeto que se creará será  T1.

      No necesariamente el objeto debe de tener el nombre de T1, al objeto que se cree le podemos asignar el nombre que nosotros deseemos. Lo que si es obligatorio, es que lleve el nombre idéntico de la clase a la que pertenecee el objeto.

class Triangulos
{
    public static void main(String args[])
    {
        Triangulo t1=new Triangulo();
        T1.b=8;
        T2.h=3;
    }

Fecha: Viernes 9 de Marzo del 2012

En la primera unidad realizamos un programa el cual, su funcionamiento era llevar una base de datos sencilla de una biblioteca.

     En ésta unidad vamos a pasar ese programa que está realizado en DEV-C++ a JGRASP.

A la persona que le interese ver  el código hacer click en la palabra código.

Fecha: Jueves 15 de Marzo del 2012

Para éste día nos dejaron investigar lo que era la clas Scanner, las palabras reservadas, los tipos de datos primitivos en Java y los tipos de conversiones.

 Para definiar scanner encontré una página donde se explica de una manera clara y seniclla. Click aqui

Tipos de datos primitivos en Java


Palabras reservadas en Java


Conversion de datos en Java
Las conversioines más fáciles de realizar son las que se llevan a cabo entre valores enteros, flotates y doubles, a continuación se pondrán unos ejemplos:
int x;
float y;
double c;

Conversión de int a float
y=(float)x;

Conversión de float a double
c=(double)y;

Conversión de double a int
x=(int)c;

Otro tipo de conversiones son las que se llevan a cabo entre valores de String a int,double,float o vicesersa.

String res;

res= String.valueOf(x);
res= String.valueOf(y);
res= String.valueOf(c);
x.Integer.parseInt(cad);
y.float.parsefloat(cad);
c.Double.parseDouble(cad); 

 Fecha: Martes 20 de Marzo del 2012


Historia de Java


El lenguaje Java así como la maquina virtual comenzaron como un proyecto interno de Sun Microsystem en 1990. Los ingenieros de Sun no estaban satisfechos con el rendimiento de C++, por lo que James Gosling, Mike Shreridan y Patrick Naughton, junto con otros más, comenzaron a desarrollar un nuevo lenguaje, que en principio pensaron dedicar  a la programación de todo tipo de aparatos, tales como microondas, neveras, teléfonos móviles, etc.. Ellos pensaron que estos generarían muchas e importantes aplicacioens para la tecnología del futuro.
     El lenguaje tendría que obviar problemas que presenta C++, en campos tales como la programación distribuida, las aplicaciones multihilo, el manejo de la memoria y ser más sencillo de manejar que C++. finalmente se deseaban que los programas fueran portables a todo tipo de aparatos.
     Inicialmente el lenguaje se llamó Oak(en español 'roble'), en honor de un roble que había dentro de la oficina.
    En 1992 se presetó como demostración una PDA con interface gráfica y un asistente inteligente representado mediante un muñeco llamado Duke.
      Oak fue presentado a concurso como solución tecnológica en varios proyectos para la industria del cine y la televisión, pero no fue elegido. En 1994 John Gage, Jame Gosling, Bill Joy, Patrick Naughton, Wayne Rosing y Erick Schmidt se reunieron para reorientar Oak. Decidieron orientarlo hacia la tecnología de la web, pues se pensaba que tras la aparición del navegar Mosaic, ésta evolucionaria hacia la misma clase de interactividad, que la televisión por cable para la cual habían estado preparando Oak.
      Fue así mismo en 1994 cuando se cambió el nombre de Oak a Java. Poco despues aún en 1994, la plataforma Java 1.0 estaba disponible para descarga en la web.
       En 1995 Netscape anunció que incluiría soporte Java para sus navegadores, dando con esto un buen apoyo a Java.


Casteo en Java


El casting es un procedimiento para transformar una variable primitiva  de un tipo a otro, o transformar un objeto de una clase a otra clase siempre y cuando haya una relación de herencia entre ambas (éste último es el más importate).
Dentro del casting de variables primitivas se distinguen dos clases:
  1. Implicito: No se necesita escribir código apra que se lleve a cabo. Ocurre cuadno se realzia una conversión ancha(widening casting), es decir, cuando se coloca un valor pequeño en un contenedor grande.
  2. Explicito: Si es necesrio escribir  código. Ocurre cuando se realiza una conversión estrecha(narrowing castign) es decir, cuando se coloca un valor grande en un contenedor pequeño. Son susceptibles de pérdidas de datos.



CÓDIGO DEL PROGRAMA DE LAS FIGURAS

PROGRAMA

Solo para que se den una idea de como lo realicé yo de una forma sencilla, tiene algo de código redundante, pero cumple con las funciones que se pidenw

import java.util.*;
class Triangulo
{
    private double l1,l2,l3,bt,ht,at,pt;
   
    void setLados(double a,double b,double c)
    {
        l1=a;
        l2=b;
        l3=c;
    }
   
    void setBAtriangulo(double a,double b)
    {
        bt=a;
        ht=b;
    }   
   
    void imprimirAtriangulo()
    {
        at=(bt*ht)/2;
        System.out.println("\n\nEl área del triangulo es: "+at+"\n\n");   
    }
   
    void imprimirPtriangulo()
    {
        pt=l1+l2+l3;
        System.out.println("\n\nEl perímetro del triangulo es: "+pt+"\n\n\n");
    }
}

class Circulo
{
    private double ra,p,a;
   
    void setRadio(double a)
    {
        ra=a;
    }
   
    void impAC()
    {
        a=(ra*ra)*3.1416;
        System.out.println("\n\nEl área del circulo es :"+a);       
    }
   
    void impPC()
    {
        p=2*ra*3.1416;
        System.out.println("\n\nEl perímetro del circulo es :"+p);
    }
}

class Rectangulo
{
    private double br,hr,ar,pr;
   
    void setBArectangulo(double a,double b)
    {
        br=a;
        hr=b;
    }
   
    void impAr()
    {
        ar=br*hr;
        System.out.println("\n\nEl area del rectangulo es :"+ar);
    }
   
    void impPr()
    {
        pr=(br+hr)*2;
        System.out.println("\n\nEl area del rectangulo es :"+pr);
    }
}

class Figuras
{
    public static void main(String args[])
    {
    Scanner sc=new Scanner(System.in);
    int opc,opct,opcc,opcp;
    Circulo c1=new Circulo();
    Rectangulo r1=new Rectangulo();
    double a,b,c;
        do
        {
            System.out.println("\n\n\nFIGURAS GEOMÉTRICAS\n");
            System.out.println("1.- TRIANGULO");
            System.out.println("2.- CIRCULO");
            System.out.println("3.- RECTANGULO");
            System.out.println("4.- SALIR\n");
            System.out.print("Seleccione una opción  ");
            opc=sc.nextInt();
                switch(opc)
                {
                    case 1:
                        do
                        {
                            System.out.println("\n\n\n\nTRIANGULO\n");
                            System.out.println("1.- Calcular área");
                            System.out.println("2.- Calcular perímetro");
                            System.out.print("3.- Regresar al menú principal  ");
                            opct=sc.nextInt();
                            switch(opct)
                            {
                                case 1:
                                    System.out.println("\n\n\nCALCULAR ÁREA DEL TRIANGULO\n\n");
                                    System.out.print("Introduce la base: ");
                                    a=sc.nextDouble();
                                    System.out.print("Introduce la altura: ");
                                    b=sc.nextDouble();
                                    Triangulo td1=new Triangulo();
                                    td1.setBAtriangulo(a,b);
                                    td1.imprimirAtriangulo();
                                break;
                                case 2:
                                    System.out.println("\n\n\nCALCULAR PERIMETRO DEL TRIANGULO\n\n");
                                    System.out.print("Introduce la medida del lado 1: ");
                                    a=sc.nextDouble();
                                    System.out.print("Introduce la medida del lado 2: ");
                                    b=sc.nextDouble();
                                    System.out.print("Introduce la medida del lado 3: ");
                                    c=sc.nextDouble();
                                    Triangulo t1=new Triangulo();
                                    t1.setLados(a,b,c);
                                    t1.imprimirPtriangulo();
                                break;
                            }
                        }while(opct!=3);
                    break;
                    case 2:
                        do
                        {
                            System.out.println("\n\n\n\nCIRCULO\n");
                            System.out.println("1.- Calcular área");
                            System.out.println("2.- Calcular perímetro");
                            System.out.print("3.- Regresar al menú principal  ");
                            opcc=sc.nextInt();
                            switch(opcc)
                            {
                                case 1:
                                    System.out.println("\n\n\nCALCULAR ÁREA DEL CIRCULO\n\n");
                                    System.out.print("Introduce el radio: ");
                                    a=sc.nextDouble();
                                    c1.setRadio(a);
                                    c1.impAC();
                                break;
                                case 2:
                                    System.out.println("\n\n\nCALCULAR PERIMETRO DEL CIRCULO\n\n");
                                    System.out.print("Introduce el radio: ");
                                    a=sc.nextDouble();
                                    c1.setRadio(a);
                                    c1.impPC();
                                break;
                            }
                        }while(opcc!=3);
                    break;
                    case 3:
                        do
                        {
                            System.out.println("\n\n\n\nRECTANGULO\n");
                            System.out.println("1.- Calcular área");
                            System.out.println("2.- Calcular perímetro");
                            System.out.print("3.- Regresar al menú principal  ");
                            opcp=sc.nextInt();
                            switch(opcp)
                            {
                                case 1:
                                    System.out.println("\n\n\nCALCULAR ÁREA DEL RECTÁNGULO\n\n");
                                    System.out.print("Introduce la base: ");
                                    a=sc.nextDouble();
                                    System.out.print("Introduce la altura: ");
                                    b=sc.nextDouble();
                                    r1.setBArectangulo(a,b);
                                    r1.impAr();
                                break;
                                case 2:
                                    System.out.println("\n\n\nCALCULAR PERIMETRO DEL RECTANGULO\n\n");
                                    System.out.print("Introduce la base: ");
                                    a=sc.nextDouble();
                                    System.out.print("Introduce la altura: ");
                                    b=sc.nextDouble();
                                    r1.setBArectangulo(a,b);
                                    r1.impPr();
                                break;
                            }
                        }while(opcp!=3);
                    break;
                    case 4:
                    break;
                    default:
                        System.out.print("Carácter no válido");
                }
        }while(opc!=4);
    }
}

EXAMEN UNIDAD II

 PROGRAMA PARA CALCULAR ÁREA Y PERIMETRO DE FIGURAS

Hoy viernes 23 de Marzo del 2012,  el profesor Omar Perez que imparte la materia de POO, nos realizó la evaluación correspondiente a esta unidad.

Una de los problemas a resolver fue: desarrollar un programa en jGrasp el cual pudiera calcular el área y el perímetro de un circulo, triángulo y rectángulo.

De una manera muy sencilla y con ayuda de los compañeros del salon, lo pudimos resolver.

A continuación les dejo el enlace por si quieren ver el código.

miércoles, 21 de marzo de 2012

Métodos de investigación II

P  R O Y E C T O

En la materia de metodos de investigación II, estamos desarrollando un proyecto, el cual esté viculado directamente a la carrera de Ing. en Sistemas Computacionales.

     En nuestro caso obtamos por desarrollar una base de datos, la cuál estará destinada a organizar, administrar,cotrolar y agilizar la mayoría de las operaciones que se realizan dentro de una tienda de abarrotes.

     Como no somos programadores de Base de Datos expertos, ni mucho menos especialistas en el área de la investigación, nuestro trabajo no cumple con todas las espectativas propuestas en los lineamientos.Pero pues se aceptan sugerencias.
Integrantes del equipo:
  • Hugo Omar Arellano Perez
  • Saúl Gómez Quiles
  • Giovanny 
  • César
Si deseas consultar el documento sobre la investigación de este proyecto, as click aquí

sábado, 17 de marzo de 2012

Creación del blog

Este está se a creado para cumplir con las  demandas académicas a la que somos sometidos. En este apartado trataré de publicar todas mis tareas de programación y de otras materias que considere adecuadas.