Métodos y Constructores

constructores

Métodos

Los métodos son la siguiente parte importante de todo esto, representan las acciones que nuestro objeto puede hacer:

Es el nombre de las funciones en Java. Su sintaxis es:

public Tipo nombreDeMétodo(){
     sentencias;
     ...
     return Atributo
}


Métodos Especiales

Cuando se coloca un atributo en Java en privado para poder acceder a el se hacen métodos o funciones que dan permisos de Leer y Escribir (o llamadas GET y SET).

Métodos GET

Este tipo de funciones lo que devuelve es el atributo deseado, para que lo puedan ver desde fuera de la clase pero no puedan modificarlo.

public Tipo getAtributo(){
    return Atributo;
}

Ejemplo:

//Ejemplo 1
public String getNombre(){
    return Nombre;
}

//Ejemplo 2 (Usando Constructores)
public Tipo getAtributo(){
    return new Tipo(Atributo);
}

//Ejemplo 3 (Usando Constructores de Copia)
public vertice getA(){
    return new vertice(a);
}

Métodos SET

Este tipo de funciones lo que hace es darle valor a un atributo deseado, para que lo puedan ver desde fuera de la clase pero no puedan modificarlo.

Nota: Al referirnos al this.Atributo lo que estamos haciendo es referirnos al atributo de la clase, y al solo poner Atributo dentro del método nos referimos al atributo que acabamos de crear como parámetro del método.

public void setAtributo(){
     this.Atributo = Atributo;
}

Ejemplo:

//Ejemplo 1
public void getNombre(String Nombre){
   this.Nombre = Nombre;
}


Métodos de Object

Todos los objetos en Java son hijos de la clase Object, por lo que existen unos métodos bastante comunes que nosotros podemos sobre escribir y que nos muy útiles.

Método toString()

Cuando tu colocas el nombre de tu objeto donde venia ir un string se llama de forma automática este método. Generalmente se espera que regrese un string.

Método equals()

Es muy común que se llame para saber si dos objetos con lo «mismo» tu puedes modificarlo según lo que para ti se considere que tu objeto sea «igual» al otro.

Método finalize()

Se llama al colector de basura, nos permite guardar el estado o datos que creemos que son necesarios conservar antes de «borrar» un objeto.


Constructor

constructores

Es un método que evita tener que llenar los valores de cada objeto. Suele ser el primer método que se encuentra en cada clase, justo después de la declaración de atributos.

Aquí te coloco sus características mas comunes:

  • Tiene el mismo nombre que la clase
  • Generalmente es público
  • Su objetivo (su motivo en la vida) es inicializar el estado de los atributos de una clase
  • Se puede sobrecargar

Forma Básica

public NombreClase(Tipo Algo1, Tipo Algo2){
   this.Algo1 = Algo1;
   this.Algo2 = Algo2;
}

Constructores de Copia

Este tipo de constructores se usan cuando se crean objetos de objetos, decir, y valga la redundancia, copia o clona un objeto que ya existe.

Este tipo de constructores permiten crear objetos que serán independientes de sus paramentos una vez creados, pues de otra manera si se modificarán los atributos que usa un constructor para crear un objeto, los atributos del objeto en sí serán cambiados.

Usado cuando se crean objetos que reciben como parámetros de creación otros objetos.

public NombreClase(NombreClase ObjetoACopiar){
Algo1 = ObjetoACopiar.Algo1();
Algo2 = ObjetoACopiar.Algo2();
...
}

Ejemplo:

public Triangulo(Punto 1, Punto 2, Punto 3){
this.1 = new Punto(1);
this.2 = new Punto(2);
this.2 = new Punto(3);
}

Entonces no se llaman ya a los métodos SET and GET sino solo:

clase Nombre = new clase(Algo1,Algo2...)

Tipo NO tiene porque ser sólo int o strings sino que puede recibir objetos de tipos que hemos creado como autos o figuras.


Destructor

Java no tiene en si un destructor, pero si que tiene algo muy parecido, te mostrare:

public void Destruir(){
Algo1 = null;
Algo2 = null;
System.gc();
}

Sobrecarga de Métodos

Finalmente algo muy importante de lo que hablar es de la sobrecarga que permite que existan en una clase varios métodos que se llamen diferente y permite una mayor versatilidad.

Si principal ventaja es que permite reutilizar muchísimo código.

Hay varias características:

  • No importan si unos son public o private
  • Igual tipo de datos devuelto
  • Igual nombre del método
  • Distintos parámetros

Por ejemplo, veamos la clase de Ejemplo:

package LogicaDelSistema;

public class Persona {

    // ====== Atributos =====
    private int edad;
    private String nombre;
    private boolean sexo;

    // === Constructor ======
    public Persona(){
        this(0,"",false);

    }
    // === Constructor SobreCarga ===
    public Persona(int edad, String nombre, boolean sexo){
        this.edad = edad;
        this.nombre = nombre;
        this.sexo = sexo;
    }
    // === Constructor Copia ===
    public void setPersona(Persona PersonaOriginal){
        this.edad = PersonaOriginal.edad;
        this.nombre = PersonaOriginal.nombre;
        this.sexo = PersonaOriginal.sexo;
    }
    // === Constructor SET ===
    public void setPersona(int edad, String nombre, boolean sexo){
        this.edad = edad;
        this.nombre = nombre;
        this.sexo = sexo;
    }

    public String toString(){
        String mensaje;
        if(sexo){mensaje= "Hombre";}
        else{mensaje = "Mujer";}
        return "Edad:"+edad+"\n"+"nombre:"+nombre+"\n"+"sexo:"+mensaje;
    }

    public void Comer(){
        System.out.print("Comiendo ");
    }

    public void Comer(String comida){
        Comer();
        System.out.print(comida);
    }

    public void Comer(String comida, String amigo){
        Comer(comida);
        System.out.print(" con "+amigo);
    }

}


Sobrecarga de Operadores

Naaaaaahh…. Java no la tiene XD.

Pero aun así es un tema muy interesante, así que solo, SOLO con este tema te contaré lo que hace C++.

Así que olvida por un rato que estamos en Java y veamos como lo hace la competencia:

Por ejemplo, veamos la clase de Ejemplo:

tipo nombre_clase::operator + (lista de parámetros);

Podemos ver distinguir entre 2 Operaciones:

Los operadores binarios se declaran con un solo parámetro, ya que el primer parámetro es pasado por el programa como this, es decir, un puntero al mismo objeto.

// Binario
Objeto Objeto::operator + (Objeto &B);
Objeto A, B, C;
C = A + B;               // C = A.operator+(&B);

Los operadores unarios se declaran sin paramétros, ya que el único parámetro es pasado por el programa como this.

// Unario
Objeto Objeto::operator ++ (int Basura);
Objeto A, C;
C = A++;                 // C = A; A = A + 1;
C = A++;                 // C = A.operator++(int Basura);

This vs *This

class Foo {
    public:
        Foo(){
            this->value = 0;
        }

        Foo tenCopia(){
            return *this;
        }

        Foo& copiaComoReferencia(){
            return *this;
        }

        Foo* tenPuntero(){
            return this;
        }

        void aumenta(){
            this->value++;
        }

        void imprime(){
            std::cout<< this->value << "\n";
        }
}

Así podemos ver que:

int main(){
    Foo foo;
    foo.aumenta();
    foo.imprime();

    foo.tenCopia().aumenta();
    foo.imprime();

    foo.copiaComoReferencia().aumenta();
    foo.imprime();

    foo.tenPuntero()->aumenta();
    foo.imprime();

    return 0;
}

Así tenemos este resultado:

1
1
2
3
btn1 btn
btn

Tipos de Abributos

Recordemos algo antes de empezar…

Principios de Encapsulamiento

Este principio dice que todos lo atributo que se relacionan a una clase tiene que estar declarados dentro de la misma clase.

cad

Hoy vamos ver un tema muy importante:

Ocultación de Información

En Java podemos tener varios tipos de atributos dependiendo de que tan disponibles están para nuestro programa.


Public

Es el característica por defecto en Java, que un atributo tenga esta propiedad significa que es posible acceder a el desde fuera  de la clase de la forma:

//Puedo hacer esto
Instancia.Atributo


Private

Que un atributo tenga esta propiedad significa que será imposible acceder a el desde fuera  de la clase de la forma:

//No Puedo hacer esto
Instancia.Atributo


Static

Que un atributo tenga esta propiedad significa que todos los objetos de su misma clase ahora tendrán el mismo valor en ese atributo o en ese método. Es decir que TODOS los objetos de esa clase tendrán un solo atributo.

  • Se coloca después de Public/Private.
  • Son muy comunes para comunicar a varios objetos de una clase.
  • Pueden crear métodos con esta característica y se pueden acceder incluso sin instanciar un objeto.
public static Atributo
private static Atributo

Final

Que un atributo tenga esta propiedad significa que no podrá modificarse el valor de este atributo una vez puesto.

  • Se coloca después de Public/Private.
public final Atributo
private final Atributo

Sin embargo si se coloca en un metodo este metodo ya no se podrá sobrescribir:

public final Metodo
private final Metodo

Protected

Que un atributo tenga esta propiedad significa que solo lo podrán modificar el ó las clases que hereden de el.

  • Se coloca después de Public/Private.
protected Atributo

 

 

 

btn1 btn
btn

Clases y Objetos en Java

Ahora si, hasta ahora Java no se veía muy diferente de C, pero eso esta por cambiar, vengan niños, les contare la historia de cuando Java conoció a POO…

hymym

¡¿No ven su cara de diversión?!


Clases

La clase es un forma de representar un objeto o concepto de la realidad, como una estructura en C. Se crea una clase con la sintaxis:

public class NombreDeClase{
  public  Atributo1;

  private Atributo2;
  private Atributo3;

  public void MuestraX(){
    ...
  }
}

Si tu generas una clase todos los métodos de la misma tendrán acceso a los atributos de la clase.

 

 


Objetos

También se las conoce como instancias.

Son las variables o instancias que creemos de una clase.

clases.png

//Sintaxis Crear un Objeto:
NombreDeClase Instancia;

//Crearlo e Inicializarlo:
NombreDeClase Instancia = new NombreDeClase();

Igualar 2 Objetos

Cuando se igualan 2 objets o que se igualan son sus direcciones de memoria y por lo tanto ahora están enlazados y si se cambia un valor a uno el otro tan sufre este cambio. La orden this.Algo1 hace referencia a su dirección de memoria yes debido a estar que se entrelazan los objetos.


Arrays de Objetos

Sintaxis:

NombreClase[] nombreVector = new NombreClase[tamaño];

 

 

btn1 btn
btn

Try Catch

try

Son una herramienta que evita que un programa se quede congelado o de un error.

 

//SINTAXIS SIMPLE
try {
   CodigoProblematico
   ...
}
catch(Exception Nombre){
   CodigoSolucion
}

//SINTAXIS COMPLEJA
try {
   CodigoProblematico
   ...
}
catch(TipoDeErrores Nombre){
   CodigoSolucion1
}
catch(Exception Nombre){
   CodigoSolucion2
}
finally{
   Código que siempre se ejecuta
}

Donde:

  • CodigoProblematico: Es el código  Peligroso o que daría problemas, al momento de dar problemas se accede a Catch
  • CodigoSolucion1: Si da un problema el código del Try, se deja de ejecutar y se procede a correr esta parte del código y todos felices.
  • CodigoSolucion2: Si da un problema el código del Try, se deja de ejecutar y se procede a correr esta parte del código y todos felices.
btn1 btn
btn

Arrays

Arrays o Vectores

Un vector sería algo muy similar a una lista, ademas que siempre se usan junto con bucles. En Java, un array unidimensional se declara como:

tipo[] nombreVector = new tipo[tamaño];

En Java, el primer elemento de un array es el que posee el índice 0, por lo tanto, un array de 20 elementos posee sus elementos numerados de 0 a 19.


Métodos

En Java los vectores son instancias de una clase, por lo tanto tienen diversos métodos muy útiles:

//Longitud del Vector
nombreVector.length()

String

Un string en Java es mucho más fácil de manejar que en C, incluso se puede:

  • Comparar directamente
  • Añadir más frases con algo tan simple como String + “bla”

Sintaxis:

String nombreDelString;

Métodos

En Java los  Strings son instancias de una clase, por lo tanto tienen diversos métodos muy útiles:

//LONGITUD
nombreDelString.length()

//REGRESAR CHAR EN X POSICION
nombreDelString.CharAt(x)

 

Hay algo curioso con Java, y es que sus strings son inmutables, es decir que no pueden cambiar, así para evitar que andemos creando objetos sin usar por todos lados, cambiamos string por estas clases, que para todo lo demás funcionan más o menos igual:

StringBuffer  //Mas seguro
StringBuilder //Mas rapido

 


Matrices

Es de la forma más sencilla un array de arrays

Sintaxis:

//DECLARACIÓN
tipo[][]nombreMatriz = new tipo[tamañoEnX][tamañoEnY];

//INICIALIZACION
tipo[][]nombreMatriz = {
   {1,2,3}
   {4,5,6}
   …
   {7,8,9}
};

Métodos

En Java las Matrices son instancias de una clase, por lo tanto tienen diversos métodos muy útiles:

//TAMAÑO EN X
nombreMatriz.length

//TAMAÑO EN Y
nombreMatriz[0].length


Tipo Vector

Sintaxis:

Vector<Objeto> Nombre = new Vector<Objeto>();

Métodos

En Java los vectores son instancias de una clase, por lo tanto tienen diversos métodos muy útiles:

//AÑADE AL FINAL DEL VECTOR
nombreVector.add(Atributo)

Tipo ArrayList

Las arraylist son como unos arrays en esteroides , nos permiten hacer mas cosas.

Sintaxis:

ArrayList<Objeto> Nombre = new ArrayList<Objeto>();

//O crearlo con una longitud
ArrayList<Objeto> Nombre = new ArrayList<Objeto>(Longitud);

Manejo de ArrayList

En Java los ArrayList son instancias de una clase, por lo tanto tienen diversos métodos muy útiles:

//Tamaño
listaNumeros.size();

//Obtener un Elemento
listaNumeros.get(i);

//Añade en Posición
listaNumeros.add(int index, Object Elemento);

//Clona un ArrayList
listaNumeros.clone();

//Coloca un Elemento en cierto Lugar
listaNumeros.set(int index, Object Elemento);

//Regresa su forma de Array
listaNumeros.toArray();
btn1 btn
btn

Funciones del Sistema

Para tener más métodos disponibles, es muy útil ver la API de Java


Imprimir por Pantalla

sistem

Se puede usar Print para imprimir o Println para añadir además una nueva línea al final.

System.out.println("Hola Mundo");

Para mostrar el valor de los atributos se usa un + :

System.out.println("El valor de X es "+x);
System.out.println("El valor de X es "+x+" y el de Y: "+y);

 

 


Scanner

scanner

Es una clase y permite obtener información desde el teclado y lo mete dentro de un atributo.

//Primero se importa:
import java.util.Scanner;

//Crear un objeto de la Clase Scanner:
Scanner NombreDelObjeto = new Scanner(system.in);

//Obtener datos con Scanner:
Atributo1 = NombreDelObjeto.nextDato();

 

Depende del tipo de dato que intentes ser el método que vas a usar:

Y nextDato será dependiendo del tipo de dato uno de los siguientes:

  • Int – NextInt();
  • Double – NextDouble();
  • String – NextLine();

 

 


Random

OLYMPUS DIGITAL CAMERA

Permite generar un número aleatorio.

//Primero se importa:
import java.util.Random;

//Crear un objeto de la Clase Random:
private Random NombreDelObjeto = new Random(system.nanotime());

//Obtener un Número Random entre 0 y X:
Atributo1 = NombreDelObjeto.nextInt(X);

 

 

 

btn1 btn
btn

Sentencias de Control

Las sentencias de control son una manera fancy de hablar de los bucles (secciones de nuestro código que se repiten muchas veces)  y las selectivas (cuando el programa decide ejecutar una u otra sección dependiendo de una decisiónasí que empecemos por la primera ¿va?

meme.jpeg

Sentencias Selectivas

IF

La más famosa y fundamental es los IF´s, estos permiten al programa con base si una condición es cierta ejecutar un bloque de código o no hacerlo.

Se ven así:

Diferentes sintaxis de IF

//FORMA BÁSICA
if(condicion){
  sentenciasSiEsVerdad;
}

//COMO OPERADOR TERNARIO
(condicion)? sentenciaVerdad:sentenciaFalsa;

//FORMA IF-ELSE
if(condicion){
  sentenciasSiEsVerdad;
}
else{
  sentenciasSiEsFalso;
}

//FORMA IF-ELSE IF- ELSE
if(condicion1){
  sentenciasSiEsVerdad1;
}
else if(condicion2){
  sentenciasSiEsVerdad2;
}
else if(condicion3){
  sentenciasSiEsVerdad3;
}
else{
  sentenciasSiEsFalsoTodo;
}

Operadores de Comparación

Lo que va dentro de condición, es muy fácil, es una pregunta que tu le harás a la máquina que podrá contestar como un sí o un no.

Deja primero mostrarte qué operadores pueden comparar:

  • != No igual
  • == Igual
  • < Menor que
  • > Mayor que
  • && And
  • || Or
  • <= Menor o igual que
  • >= Mayor o igual que

Otra cosa muy útil de saber es que para C, cualquier valor que sea distinto de cero es verdadero, siendo por tanto falso sólo si el valor cero.

Por lo tanto será verdad siempre que el valor de la variable x sea distinto de cero, sea cual sea el tipo de la variable x.

Por lo tanto podemos terminar con algunos ejemplos de condiciones:

//Ejemplo 1
double pi = 3;
int variableBasura;

if(pi < 4){
  variableBasura = 0;
}

//Ejemplo 2
int numero = 3;

if( numero != 3 ){
  printf("Nunca se va a ejecutar esto");
}

//Ejemplo 3
int condicion = 0;

if(condicion!){
  printf("Esto siempre se va a ejecutar");
}

Así es como la mayoría de los programas que conoces funcionan, veamos ahora la siguiente:


Switch

Son básicamente igual a los if, simplemente que con otra sintaxis (si, se que hay más diferencias técnicas pero no importa), aquí su sintaxis:

switch (variable){
  case const1:
    sentencia;
    ...
    break;

  case const2:
    sentencia;
    ...
    break;

  ...

  default:
   sentencia;
}

Y si, eso es un switch, (¿Ves que no muerde?), total, esta sintaxis de ahí arriba se puede entender muy fácil si te muestro un código con if´s que haría exactamente lo mismo, se vería así:

if(variable == const1){
    sentencia;
    ...
}
else if(variable == const1){
    sentencia;
    ...
}
else if(variable == const2){
    sentencia;
    ...
}
else{
    sentencia;
    ...
}

Ahora vamos a ver un segundo tipo de sentencias de control, los bucles : 3

 


Bubles

WHILE

Este es sin menor duda la forma más básica de un bucle, lo único que hace es que ejecuta un bloque de código una y otra vez mientras una condición sea verdad.

while (condicion){
  sentencias;
}

No puede ser tan fácil, ¿o sí?…
La verdad es que lo es, es por eso que es el bucle más poderoso, pero la verdad es que mucha gente lo acaba usando es un estilo más o menos así:

int i = 0;             //Este es nuestro contador
while (i < tope){      //Lo vamos a seguir haciendo tope veces
  sentencias;          //Ejecutamos algo
i++;                   //Aumentamos el contador en uno
}

Pero el problema es que como te das cuenta resulta poner mucho código para repetir cosas, por eso se inventó un nuevo bucle.


FOR

Este es lo mismo que el bucle while, simplemente con otra sintaxis, es más esta es la sintaxis:

for (inicialización; condición; incremento){
  sentencia;
}

Así el último código que vimos con los whiles, se vería así con for:

for (i=0; i < tope; i++){
  sentencia;
}

Mucho más bonito y organizado ¿verdad?

Perfecto, ya casi terminamos, ya solo falta el final, te mostraré el último bucle, el do while.


DO WHILE

Al contrario que los bucles for y while que comprueban la condición en lo alto de la misma, el bucle do/while comprueba la condición en la parte baja del mismo, lo cual provoca que el bucle se ejecute como mínimo una vez. La sintaxis del bucle do/while es:

do{
  sentencia;
}
while(condicion);


Break y Continue

Las sentencias de control break y continue permiten modificar y controlar la ejecución de los bucles anteriormente descritos.

  • La sentencia break provoca la salida del bucle en el cual se encuentra y la ejecución de la sentencia que se encuentra a continuación del bucle.
  • La sentencia continue provoca que el programa vaya directamente a comprobar la condición del bucle en los bucles while y do/while, o bien, que ejecute el incremento y después compruebe la condición en el caso del bucle for.

 

 

 

btn1 btn
btn

Sintaxis Básica de Java

Comentarios

Antes que nada (y ya para quitarme eso de encima), aquí esta como se escriben los comentarios en Java:

//Comentario de una línea para algo rápido

/** Comentario largo,
*ideal para la Documentación
*/

 


API de Java

Podemos entenderlo como un conjunto de muchísimas clases que ya trae hecha Java para ahorrarnos el trabajo. También las conocen como las librerías de Java.

import java.Bla.Bla

No se preocupen si no le encuentran ningún sentido a esto, solo sigan leyendo.

 


Atributos

En Java, hay varias clases de «variables» que podemos ocupar, por eso en Java se usa el término “Tipos de datos” para englobar a cualquier cosa que ocupa un espacio de memoria y que puede ir tomando distintos valores o características durante la ejecución del programa.

En Java diferenciamos dos tipos de datos:

  • Tipos primitivos, que se corresponden con los tipos de variables en lenguajes como C y que son los datos elementales que hemos citado.
  • Los Tipos Objeto, son mucho más inteligente y te permiten realizar muchas cosas más fácilmente.

También podemos dividir los atributos en dos tipos:

  • Estáticos (es decir que atributos que nunca van a cambiar, también los conocen como MACROS) .
  • Dinámicos (es un atributo que puede variar, así que lo consideramos, valga la originalidad, solo un atributo).

 


Tipos Primitivos

Sin métodos, no son objetos, no necesitan una invocación para ser creados. Fáciles y sencillitos.

A continuación te muestro todos los tipos de datos primitivos disponibles en Java:

Nombre Tipo Ocupa Rango
byte Entero 1 byte -128 a 127
short Entero 2 bytes -32768  a 32767
int Entero 4 bytes 2*109
long Entero 8 bytes Muy grande
float Decimal

simple

4 bytes Muy grande
double Decimal

doble

8 bytes Muy grande
char Carácter

Usa comillas simples

2 bytes
boolean Valor:

true o false

1 byte

 

Una vez que hayas decidido cual de todos estos vas a ocupar, tienes que seguir este sintaxis (si, es muy muy parecida a C).

 


Sintaxis

//FORMA BASICA
TipoDeDato NombreDeDato;

//FORMA DECLARAR VARIAS
TipoDeDato Dato1, Dato2, Dato3;

//FORMA DECLARAR Y INICIALIZAR
TipoDeDato Dato1 = Valor;
TipoDeDato Dato2 = Valor2, Dato3 = Valor3;

 


Tipos Objeto

Con métodos, necesitan una invocación para ser creados.

Tipos de la biblioteca estándar de Java String (cadenas de texto)

Muchos otros (p.ej. Scanner, TreeSet, ArrayList…)

Tipos definidos por el programador Cualquiera que se nos ocurra, por ejemplo Taxi, Autobus, Tranvia.
Arrays Serie de elementos o formación tipo vector o matriz.

Lo consideraremos un objeto especial que carece de métodos.

Tipos envoltorio o wrapper
(Equivalentes a los tipos primitivos pero como objetos…Cool)
Byte
Short
Integer
Long
Float
Double
Character
Boolean

 

 


Operadores

Matemáticos

Símbolo Operación
+ Suma
Resta
* Multiplicación
% Módulo

(Resto de división)

 

Simplificaciones

Forma Simple Forma Compleja
x += y x = x+y
x -= y x = x-y
x *= y x = x*y
x /= y x = x/y
x++ x = x+1
x– x = x-1

 

Lógicos

Operador Significado
!      NOT
>      Mayor que
<      Menor que
==     Igual
&&      AND
||      OR
^     XOR
>=      Mayor o igual que
<=      Menor igual que
!=      No igual

 

Y listo, hemos terminado con la parte más difícil de Java, bueno, al menos la más aburrida, así que para compensarlo, toma, un gatito :3

cat

 

btn1 btn
btn

Introducción a Java

El Lenguaje

java.pngLa principal característica de Java es la de ser un lenguaje compilado e interpretado.

Todo programa en Java ha de compilarse y el código que se genera: bytecodes es interpretado por una máquina virtual. De este modo se consigue la independencia de la máquina (ósea en teoría se puede ejecutar en cualquier Sistema Operativo) , el código compilado se ejecuta en máquinas virtuales que si son dependientes de la plataforma.

Osea…en español.. ¡Que Java no se ejecuta en tu computadora, sino en un programa especial, se «ejecuta» en una maquina virtual y como hay maquinas virtuales de Java para todos los sistemas operativos, Java te permite hacer aplicaciones que funcionen en cualquier computadora del mundo!

¿Para qué usarlo?

Java es un lenguaje orientado a objetos de propósito general. Aunque Java comenzará a ser conocido como un lenguaje de programación de applets que se ejecutan en el entorno de un navegador web, se puede utilizar para construir cualquier tipo de proyecto. 

Java y Seguridad ❤

security-in-javaEn el diseño de Java se prestó especial atención a la seguridad. Existen varios niveles de seguridad en Java, desde el ámbito del programador, hasta el ámbito de la ejecución en la máquina virtual. Con respecto al programador, Java realiza comprobación estricta de tipos durante la compilación, evitando con ello problemas tales como el desbordamiento de la pila. (¡bien!)

¿Qué necesito para empezar a Programar?

  • Muchas ganas y paciencia (en especial al principio)
  • Java JDK: Es las herramientas de desarrollo, puedes descargarlo aquí
  • IDE: Tu programa o «entorno» para programar, yo.. YO estoy enamorado de IntelliJ IDEA 

14693_1 java

 

¿Dudas con esto? Para eso esta Google, así que resuelve blanca palomita ¡Creo en ti! ; )

 

 


Hola Mundo

Antes que nada vamos a quitarnos esto de encima, así se ve un hola mundo en Java:

public class NombreDeClase{
  public static void main(String[] args) {
    System.out.println("Hola Mundo");
  }
}

 

No se ve sencillo ¿verdad? No te preocupes, esta bien, como te imaginas primero vamos a ver un poco de sintaxis para poder entender este desastre de palabras.

Así que es hora de ponernos con la sintaxis.

 

btn1 btn
btn

Fundamentos de POO

La mayoría de los lenguaje de programación creados en los últimos 30 años tiene algo en común, se basan en algo llamado: «Programación Orientada a Objetos»

Antes que nada, no POO (su abreviatura) no es un lenguaje, sino un paradigma.

Ok, ok, ¿Qué demonios es un paradigma?

Paradigma: Forma de Pensar. Así de fácil, POO (ó OOP en inglés, por si algún día te lo encuentras) es una forma de pensar  la programación de manera diferente a lo «tradicional».

¿Y qué es lo tradicional para empezar?

Pues lo tradicional es la Programación Estructurada, donde en general (y digo general porque si, tienen funciones y cosas así, pero no importa ahora) tu programa es como una receta de cocina: Un conjunto de instrucciones y nada más.

poo1

Tú le dictas a la computadora que quieres que haga y lo hace, sencillo, ¿no?

Pues POO no piensa que sea la manera más fácil (y esto es debatible pero eso queda para otro post) POO piensa que es mucho más fácil si hacemos que todo sea como las cosas de la vida real, si hacemos que todo en la computadora sea como …como objetos.

POO piensa diferente, así que agarrate de tu asiento, porque te voy a mostrar una nueva forma de programar completamente diferente a lo que viste arriba:


¿Qué es POO?

Los objetos de los que hablamos no representan cosas abstractas o «raras» su objetivo es representar cosas de la vida real, como los siguientes:

Se ve fácil, ¿no es así?

Bueno, para seguir adelante tenemos que traer a la mesa dos conceptos, y con ellos lo más difícil de memorizar de toda esta lección.


Clase

Una clase es un plano, es una idea, es una descripción, es una definición.

«Describe como es algo, pero no es ese algo en si»

Podemos tener una definición formal en la que una clase es un prototipo o del que contiene una colección de datos (atributos)  un conjunto de operaciones (métodos) con esos datos que manipulan ESOS datos.

Como por ejemplo el plano de una casa:

plano.png

Plano de una casa

O un ejemplo más común de clases son como los siguientes:

clases.png

Y TODA clase define dos cosas en esencia:

  • Atributos: Estas son las características de tu objeto, son sus cualidades en sí.
  • Comportamiento: Son lo que puede hacer, su forma de comportarse.

Por ejemplo si estuviéramos haciendo una clase de una persona podemos tener algo así:

c1

Pero como a los programadores siempre nos encanta darles nombres raros a las cosas, los nombre comunes con los que se describen esto son:

c2

  • Propiedades: Estas son las características de tu objeto, son sus cualidades en sí.
  • Métodos: Son lo que puede hacer, su forma de comportarse.

Una clase define características y comportamientos comunes compartidos por un tipo de objeto. Se parece más a una plantilla cuando se crea cierto tipo de objeto.

Por ejemplo, tenemos un objeto llamado Cris, y clasificamos a Cris como un humano. No sabemos quién es Cris, pero podemos decir que tiene manos, dedos, ojos, etc. porque sabemos que es humano. Lo mismo sucede con otros objetos del mundo real. Podemos decir cuáles son esas cosas apenas sabiendo sus clases.

Otro ejemplo sería Cris es un programador y su jefe es el gerente, pero podemos decir con seguridad que Cris y su jefe son empleados (en esta frase, hay otro conocimiento sobre OOP, hablaremos de esto más adelante), porque ellos Comparten una característica común, que es su descripción del trabajo.

Pero al final de la historia la clase esta describiendo estas cosas de forma abstracta, después de todo una clase solo es una descripción de algo, te dirá que una persona por ejemplo tiene un nombre o una edad pero no te dirá una edad en especial.

Tenemos una cápsula genérica, un prototipo , del cual parten todos las cápsulas u objetos.

plantilla.png

Esta clase es un nuevo tipo de dato.

De la misma manera que no tiene un mísero sentido hacer un plano si no quieres hacer una casa, no tiene sentido hacer una clase a menos que quieras crear un objeto.


Objetos

«La cosa en si pues»

Los objetos son creados a partir de una clase, de hecho otro nombre muy común de estos son instancias, son instancias de una clase.

casa.png

Plano-Clase y Casa-Objeto

Además podemos crear más de un objeto de una misma clase.

Ejemplo:

Vamos a tomar un ejemplo más detallado de una clase:

Clase: Pokemon

Propiedades:
  nombre
  tipo
  elemento
  tamaño
  sonido

Metodos:
  ataque
  llorar

A continuación, permite crear un objeto de estas características y comportamientos:

Propiedades:
  nombre: Pikachu
  tipo: tipo de ratón pokemon
  elemento: electric
  tamaño: pequeño
  sonido: pika, pika

Metodos:
  cry: Produce un "pika, pika"
  ataque: Ataca a otro pokemon.

La programación orientada a objetos (POO) es un método de implementación en el cual los programas están organizados como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son todas miembros de una jerarquía de clases las cuales están unidas a través de relaciones de herencia.


Puntos Clave de POO

Podemos resumir todas las ideas de POO en los siguientes puntos:

  • Encapsulamiento: Recuerda que las clases son como una caja cerrada, todos los métodos y las variables están dentro y toda la información solo puede ser accedido por medio de sus sistemas propios, esto hace que sea de verdad como una caja cerrada, su información solo entra y sale por las formas y de la forma en que la clase quiera. Puede incluso no importante como funciona por dentro, todo lo que necesitas saber es que funciona.

pildora

  • Herencia o Jerarquía:  Esto es clave, la herencia permite que una clase pueda servir como plantilla para la creación de futuras clases, no te preocupes, explicaremos esto a detalle después.

viejo

  • Polimorfismo: Un solo nombre de una clase o método puede representar diferentes implementaciones. Al igual que un Ferrari y un Porsche. Sabemos que los 2 coches tienen motores diferentes y mecanismos diferentes, pero se que ambos son coches y se conducirlos. Eso es polimorfismo, utilizando diferentes implementaciones pero solo una interfaz.

mariposa

 

Otra de las característica en POO en si se vinculan las funciones y los datos, cosa que no exista.

 

 


Principios de POO

columna

Principios son las Columnas en las que se sustenta POO

Toda esta filosofía se puede simplificar en varias columnas, son los pilares que fundamentan este paradigma.

  • Principio de Abstracción

Modelar, este principio dice que POO busca modelar los objetos, busca atraerse y simplificar un objeto de la vida real a solo un par de atributos. En otras palabras, buscaremos transformar un objeto de la vida real en atributos (características) y sus acciones (métodos). Consiste en encontrar las partes fundamentales de un sistema para describirlas de manera simple y precisa.

cat.png

  • Principio de Jerarquía

Todo conocimiento o modulo de tu programa puede ordenarse como un árbol como por ejemplo (transporte-raíz, y las hojas sean autos, barcos, caballos), de que el que esta más abajo hereda todas las características de los de arriba.

  • Principio de Tipificación 

Todo lenguaje en POO esta tipificado, es decir tenemos diferentes TIPOS de datos.

  • Principios de Encapsulamiento

Este principio dice que todos lo atributo que se relacionan a una clase tiene que estar declarados dentro de la misma clase.

poo2

poo1.png

  • Principios de Modularidad
    • Descomposición Modular: Descompón tu programa en módulos para que sea más fácil. Llamadas clases.
    • Composición Modular: Todos estos modelos tiene que estar conectados, son partes de un todo.
    • Comprensibilidad Modular: Tiene que ser posible entender un modulo sin necesidad de conocer los demás módulos.
    • Continuidad Modular: Si realizo cambios (mejoro o corrijo errores) en un módulo no debe de importarle en nada a los demás.
    • Protección Modular: Sin importar que haga, debería ser imposible para mi afectar negativamente a un módulo desde fuera de este.

Podemos también hablar de varias reglas:

Correspondencia Directa: Que podamos ser capaces de mejorar un modulo y el programa debe de funcionar de manera normal.

Pocas Interfaces: Busca que tus clases no se relacionen a menos que sea totalmente necesario, evitando así errores al actualizar un módulo.

Pequeñas Interfaces: Busca que la relación, que la cantidad de atributos sean los menores posibles, busca una mayor independencia de cada módulo.

Interfaces Explicitas: Evita que varios módulos modifiquen un mismo atributo para evitar conflicto de escritura o lectura.

Ocultación de la Información: Solo la clase misma debería poder ser capaz de modificar sus atributos.

 

Y si…no es ni de lejos todo lo que POO pero nos dará una idea bastante exacta de esta nueva idea a de entender la programación.

homer

Ya se POO

Así que listo, regresa por donde has venido y ve a aprender ese lenguaje que tanto quieres, Java, C++ o Python.