0% encontró este documento útil (0 votos)
43 vistas

Repaso Java

Este documento presenta una introducción a las estructuras de datos en Java. Explica los tipos de datos primitivos y por referencia en Java, así como conceptos como sobrecarga de métodos, herencia, abstracción e interfaces. También incluye un caso de estudio sobre una jerarquía de figuras geométricas que ilustra estos conceptos.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas

Repaso Java

Este documento presenta una introducción a las estructuras de datos en Java. Explica los tipos de datos primitivos y por referencia en Java, así como conceptos como sobrecarga de métodos, herencia, abstracción e interfaces. También incluye un caso de estudio sobre una jerarquía de figuras geométricas que ilustra estos conceptos.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 25

Introducción

Repaso de Java
Estructuras de Datos

Iván Castellanos
Departamento de ingeniería de sistemas e industrial
Universidad Nacional de Colombia

15 de agosto de 2018
Introducción

Java

Java es un sistema creado a mitad de los 90's, hay 3 cosas que hay
que considerar sobre Java:
El lenguaje de programacion: Es un lenguaje similar a C++,
pero con algunas caracteristicas que lo hacen mas simple.
Las librerias: Java viene con un gran numero de librerias con
capacidad de uso a muchas aplicaciones.
La maquina virtual: los programas de compilan a bytecode java
el cual se ejecuta en un sistema intermedio independiente de la
arquitectura del computador.
Introducción

Compilacion Tradicional
Introducción

Compilacion en Java
Introducción

Tipos De Datos

En Java hay 2 categorias de datos:


Datos primitivos: son los datos basicos de java, se trabajan
por valor
byte, 8 bits, [-128 , 127]
short, 16 bits, [-32668, 32767]
int, 32 bits, [-2147683648, 2147483647]
long, 64 bits, [-9.223372e+18, 9.223372e+18]
oat, 32 bits, ± 1.4e-45 hasta ± 1.4e-45
double, 64 bits ± 4.9e-324 hasta ± 1.8e-308
char, 16 bits, [\u0000, \uFFFF]
boolean, 1 bit, true o false
void
Datos por referencia: trabajan por referencia a una dirección
de memoria, algunos ejemplos son: Byte, Short, Integer, Long,
Float, Double, Character, Boolean, Void, String, BigInteger,
BigDecimal, etc.
Introducción

Tipos De Datos

Ejemplo (Datos primitivos)


int a, b;
a = 5;
b = 5;
System.out.println(a == b) //true

Ejemplo (Datos por referencia)


Integer a, b;
a = new Integer(5);
b = new Integer(5);
System.out.println(a == b) //false

nota
En Java los argumentos de los métodos siempre se manejan por
valor
Introducción

Jerarquia de tipos

Los tipos de datos pueden ser "promovidos"de la siguiente forma:


double: ninguno
oat: double
long: oat, double
int: long, oat, double
char: int, long, oat, double
short: char, int, long, oat, double
byte: short, char, int, long, oat, double
boolean: ninguno
nota
En Java boolean no es un tipo de dato numérico
Introducción

Conversion de tipos

Se pueden realizar conversiones de tipos explícitas, las cuales


usualmente no son aceptadas:
Ejemplo (Conversión - casting)
byte b;
double d = 199.99;
b = d; //Da error de compilacion
b = (byte) d; //Corre correctamente
System.out.println(b); //-57
Introducción

Sobrecarga de métodos
Un metodo puede tener multiples declaraciones, dependiendo de los
argumentos que se pasen, esto se llama sobrecarga de métodos.
Ejemplo (Sobrecarga)
int max(int a, int b){...}
int max(int a, int b, int c){...}
int max(float a, float b){...}

nota
El tipo retornado no se considera en la sobrecarga, es decir, no se
permite que la unica diferencia entre 2 metodos sobrecargados sea
el tipo retornado

nota
Cuando el tipo de argumentos no coincide de forma exacta el
compilador utiliza la jerarquia de tipos
Introducción

Objetos y clases
Una clase en java consiste en campos que almacenan datos y
métodos que son aplicados a instancias de esa clase.
Un objeto es una instancia de una clase.
Ejemplo (Objetos)
public class Point {
int x, y;
Point(){this.x = 0; this.y = 0;}
Point(int x, int y){this.x = x; this.y = y;}
public String toString(){
return "(" + Integer.toString(x) + ", " +
Integer.toString(y) + ")";
}
}

nota
Todos los objetos se manejan por referencia
Introducción

Objetos y Clases

Ejemplo (Datos por valor)


static void initialize(int a){
a = 0;
}
int a = 1;
initialize(a);
System.out.println(a); //1

Ejemplo (Objetos)
static void initialize(Point a){
a.x = a.y = 0;
}
Point a = new Point(1, -1);
initialize(a);
System.out.println(a); //(0, 0)
Introducción

Herencia

En un lenguaje de POO el mecanismo fundamental de reuso de


código es la herencia. La herencia nos ayuda a extender la
funcionalidad de un objeto.

Ejemplo (Caso de estudio: jerarquia de guras - shapes)

Se implementarán diferentes
guras, a partir de la jerarquia mostrada,
depende de la clase derivada se podrán
tener hasta atributos de coordenadas, del
radio y de la altura y se podran tener hasta
metodos para obtener el área y el volumen.
Introducción

Caso de estudio: Shape

public abstract class Shape{

public double getArea() {


return 0.0;
}

public double getVolume() {


return 0.0;
}

public abstract String getName();


}
Introducción

Caso de estudio: Point

public class Point extends Shape{


int x, y;
Point(){this.x = this.y = 0;}

Point(int x, int y){


this.x = x;
this.y = y;
}

public String getName(){return "Point";}

public String toString(){


return "(" + Integer.toString(x) + ", " +
Integer.toString(y) + ")";
}
}
Introducción

Caso de estudio: Circle


public class Circle extends Point{
double radius;
public Circle() {super(); radius = 0.0;}

public Circle(int x, int y, double radius) {


super(x, y); this.radius = radius;
}

public double getArea(){ return Math.PI * radius *


radius; }

public String getName(){ return "Circle"; }

public String toString() {


return "Center " + super.toString() + " Radius: "
+ radius;
}
}
Introducción

Caso de estudio: Cylinder


public class Cylinder extends Circle{
double height;
public Cylinder() {super(); height = 0.0;}

public Cylinder(int x, int y, double r, double h) {


super(x, y, r); this.height = h; }

public double getArea(){ return 2.0 *


(super.getArea() + Math.PI * radius); }

public double getVolume(){ return super.getArea() *


height; }

public String getName(){ return "Cylinder";}

public String toString() { return super.toString() +


" Height: " + height; }
}
Introducción

Abstracción

En java un metodo abstracto es aquel que no está denido y


por ende se dene en una clase derivada.
Una clase que tenga al menos un metodo abstracto debe ser
una clase abstracta.
Estas clases solo se utilizan como superclases en jerarquias de
herencias, no se pueden instanciar objetos con estas clases
dado que están incompletas.
Clases que pueden instanciar objetos se llaman clases
concretas. Estas clases tienen implementados todos los
metodos que declaran.

nota
Los constructores no pueden ser heredados, por ende no pueden ser
abstractos
Introducción

Interfaces

Cuando una clase puede ser derivada por mas de una


superclase se dice que hay multiple herencia. Java no soporta
multiple herencia, pero provee una alternativa conocida como
interfaz.
Una interfaz es un tipo de clase muy abstracta, dado que
consiste unicamente de metodos abstractos publicos y campos
estáticos públicos nales.
Con las interfaces se especica que hacer mas no la
implementación, las cuales serán implementadas por la clases
derivadas.

nota
Mientras unas clase puede extender solo una clase, puede
implementar mas de una interfaz
Introducción

Caso de estudio: Interfaces Shape y Material

public interface I_Material {

public double aluminio = 2700.0;

public double getDensity();


}

public interface I_Shape {

public abstract double getArea();

public double getVolume();

public String getName();


}
Introducción

Caso de estudio: Metal_Cylinder

public class Metal_Cylinder extends Cylinder


implements I_Shape, I_Material{

public Metal_Cylinder(){ super(); }

public Metal_Cylinder(int x, int y, double radius,


double height) {
super(x, y, radius, height);
}

@Override
public double getDensity() {
return aluminio * getVolume();
}

public String getName(){ return "Metal_Cylinder"; }


}
Introducción

Polimorsmo

Es una propiedad consistente en poder utilizar las mismas


operaciones (sintacticamente) en objetos de diferentes tipos.

Caso de estudio: Polimorsmo en Shapes


public class PoliTest {

static void printAll(Shape[] arr){


for(int i = 0; i<arr.length; i++) {
if(arr[i] != null)
System.out.println(arr[i].getName() + ": "
+ arr[i] + "\n" + "Area: " +
arr[i].getArea() + " Volume: " +
arr[i].getVolume() + "\n");
}
}
Introducción

Caso de estudio: Polimorsmo en Shapes


public static void main(String args[]){
Shape[] a = { new Point(7, 11), new Circle(22, 8,
3.5), null, new Metal_Cylinder (20, 30, 3.3,
10.75)};
printAll(a);
}
}

Resultado en consola:
Point: (7, 11)
Area: 0.0 Volume: 0.0

Circle: Center (22, 8) Radius: 3.5


Area: 38.48451000647496 Volume: 0.0

Metal_Cylinder: Center (20, 30) Radius: 3.3 Height: 10.75


Area: 89.15839950887833 Volume: 367.7783979741231
Introducción

Recursión
En Java, al igual que en muchos lenguajes de programación se
pueden utilizar funciones recursivas, que consisten en
funciones que se expresan con llamadas a si mismas.
Es una técnica que sirve para resolver muchos problemas que
son complejos de solucionar de manera iterativa.
Una función recursiva consiste de dos partes: caso inicial o
caso base y llamada recursiva.
nota
La llamada recursiva solo se puede ser invocada un número limitado
de veces (Pila de la recusión), cuando se pasa de este límite se tiene
un error en tiempo de ejecución conocido como Stack Overow.

nota
La recursión es muy util para realizar soluciones de tipo divide y
vencerás o de programación dinámica.
Introducción

Ejemplos Recursión

Ejemplo (Factorial)
int factorial(int n){
if(n==0) return 1;
return n * factorial(n-1);
}

Ejemplo (Sucesión de Fibonacci)


int fibonacci(int x){
if(x==0) return 0;
if(x==1) return 1;
return fibonacci(x - 2) + fibonacci(x - 1);
}
Introducción

Ejemplos Recursión

Ejemplo (Algoritmo de Euclides - mcm)


int euclides(int a. int b){
if(b==0) return a;
return euclides(b, a % b);
}

Ejemplo (Torres de Hanoi)


void hanoi(int n, boolean left) {
if(n == 0) return;
moves(n-1, !left);
if(left) System.out.println(n + " left");
else System.out.println(n + " right");
moves(n-1, !left);
}

También podría gustarte