El software libre gira entorno al usuario ya que lo que pretende es que este pueda ver, modificar o mejorar el software, con lo cual podríamos decir que se basa en un modelo filosófico que gira entorno al usuario. Cabe recalcar que Software Libre no es lo mismo que Open Source ya que este último se enfoca en las ventajas de su modelo de desarrollo.
Ahora para que un producto software sea considerado como Software Libre debe cumplir con 4 libertades:

- Ejecutar el software con cualquier propósito
- Estudiar y modificar el programa
- Distribuir el programa de manera que se pueda ayudar a los demás
- Distribuir las versiones propias

Pues básicamente todo lo anterior desde mi punto de vista se traduce en libertad, aquella con la cual podemos aprender como está hecho determinado sistema o producto software, esa misma libertad no la podemos encontrar en el software privativo, ya que muchas de las veces los usuarios creen o piensan que por el puro hecho de adquirir una licencia o pagar por un producto software, este les pertenece y pues con lo cual están equivocados ya que está pagando por hacer uso de él, nada más. 

Entonces desde mi punto de vista para que pagar por un sistema operativo cuándo existe uno que es gratis y te ofrece seguridad, estabilidad y sobre todo libertad (Linux), o ¿Por qué poner en riesgo nuestra privacidad y datos al instalar aquel producto software de forma pirata?, ahora bien con esto no quiero decir que no se deba pagar por algo, la razón esta en que nos debemos preguntar si no existe una alternativa gratuita y libre a aquello que estamos necesitando, también deberíamos saber de que por el puro hecho de que algo sea gratis no quiere decir que este nos convenga, hay muchas compañías que no son para nada éticas y al cabo de esa gratuidad ponemos en juego nuestra privacidad y datos, es como la historia del caballo de Troya, y pues la moraleja es que debemos preguntarnos la razón por la cuál algo resulta ser aparentemente es gratis.

 Ahora bien en cuanto a la libertad pues somos nosotros quienes decidimos ser libres o esclavos de un sistema o algo, y con esto me refiero a que no debemos ser dependientes de cierta tecnología o software. Para terminar pienso que las escuelas, colegios y universidades debería dar ese libertad a sus estudiantes, permiténdoles que ellos sean quienes escojan lo que quieren aprender y que tecnología usar, ya que muchas de las veces en las Universidades se enseña cierto lenguaje de programación cuando en el mundo real existen muchos más, y lo peor es que la mayoría de estudiantes se quedan con lo que les enseñaron en la Universidad. A todo esto de acuerdo a mi filosofía es que nada ni nadie le pertenece a alguien, ya que para crear cualquier cosa, sea este un invento o producto software estás usando algunas herramientas que fueron hechas por otras personas y pues sencillamente tú no puedes atribuirte el todo en su conjunto, con lo cual: "El conocimiento le pertenece al mundo." 


La razón por la cual usar un sistema operativo GNU-Linux pueden ser muy variadas, en lo personal, me gusta mucho por que es algo que escogí yo, es algo que me hace sentir libre, además es gratuito y algo muy importante es que es muy personalizable, ya que puedes elegir entre una amplia variedad de distros o sabores, puedes escoger el entorno de escritorio ya sea: Gnome, Kde, Xfce, Cinnamon, Mate, entre muchos otros.

Entre la gran variedad de distros a escoger las conocidas y pululares son: debian, fedora, ubuntu, Redhat, OpenSuse, kubuntu, Linux Mint, Elementary OS, Deepin OS, etc. Unas distros se basan en otras como por ejemplo ubuntu esta basada en debian, por que lo utiliza paquetes .deb, en el caso de Kubuntu se basa en ubuntu, ya que es una distro que se podría decir que es ubuntu pero con entorno KDE, en el caso de Linux mint, esta distro se encuentra basada en Ubuntu, pero la diferencia esta en que linux mint tiene otros entornos de escritorio y viene con los códecs de audio y vídeo, en lo personal la considero robusta y estable. Cabe recalcar que la mayoría de distros vienen con algunos programas o paquetes ya instalados como por ejemplo: libre office, lector pdf, navegador, reproductor de audio y vídeo, etc.  Ese plus extra de venir con programas útiles ya instalados es algo que se agradece mucho, y sobre todo te ahorra tiempo.

Como lo mencionaba antes algo que me gusta mucho de Linux es su nivel de personalización, puedes cambiar el estilo de las ventas, los iconos, transparencias, efectos y un sin fin de cosas. La primera distro que use fue Linux mint 10, y desde ahí me gusto aunque al principio no me acostumbraba por que yo venía del mundo windows, pero una cosa si que he aprendido, la cual es de que no hay que tenerle miedo al cambio, ya que muchas de las veces el cambio es bueno y necesario. Si vienes del mundo windows probablemente dirías algo como: “más vale malo conocido, que bueno por conocer”, y la verdad es que eso no se debería hacer, hay que ser de mente abierta.

Se que algunos no querrán hacer la transición a linux, en primer lugar por miedo al cambio, y con escusas como: es que es muy difícil, o ahí se usa mucho la terminal, pero lo cierto es que el Linux de hoy en día no es como el de hace 5 0 10 años, actualmente tiene buena usabilidad, es intuitivo e inclusive me atrevería a decir que en cuanto te acostumbras, las cosas se hacen más fáciles, como por ejemplo instalar algún software o programa con un simple comando como sudo apt-get install nombrePrograma, o listar los archivos ocultos de una carpeta, trabajar con git en linux desde la terminal es algo que mola mucho y se hacen las cosas más rápido, o inclusive puedes instalar cualquier programa que se encuentre disponible en los repositorios de tu distro favorita simplemente abriendo el centro de software y listo.

Bueno para no alargar más el tema te invito a que pruebes linux, y antes que se me olvide tengo que decirte que la mayoría de distros tienen algo que se conoce como live cd, lo cual quiere decir que puedes instalar linux en una usb y desde allí correrla, simplemente lo que necesitarías es configurar tu pc o laptop para que arranque desde la usb, también algo muy importante que se me olvidaba es que también puedes instalar algunos programas de windows en linux mediante wine y PlayOnLinux.


 Bueno para terminar te dejo con algunas capturas de mi distro actual:










Programar es como jugar al fútbol, ambas disciplinas tienen mucho en común, como por ejemplo que ambas se aprende haciendo. Para jugar al fútbol necesitas de una pelota, de habilidad  y claro de tu entusiasmo y ganas de aprender a jugar, para programar ocurre algo similar, necesitas de un computador, de habilidad y al igual que el fútbol necesitas tener entusiasmo, se trata de disfrutar haciendo lo que haces. Si bien es cierto que existen personas que de una u otra forma se podría decir que nacen con una habilidad innata para jugar al fútbol o programar, pues esto nos plantea una pregunta: ¿el genio nace o se hace?, desde mi punto de vista suceden ambas, uno puede nacer con ciertas habilidades para hacer mejor una actividad, es decir ocurre que podemos tener varias inteligencias múltiples  unas más desarrolladas que otras como: inteligencia espacial, lingüístico-verbal, musical, cinestética, intrapersonal, interpersonal, naturalista, etc. 

Hay una teoría que dice que se necesitan de 10.000horas para ser un experto en algo, ya que la práctica hace al maestro. Entonces para jugar al fútbol se necesita conocer las reglas o mejor dicho como se juega, estas son: dar pases, chutar, tirar a portería, hacer regates, etc. Para programar necesitamos conocer los fundamentos básicos de programación o mejor dicho saber en qué se basa la programación como por ejemplo: declarar variables e inicializarlas, declarar e implementar métodos, crear arreglos, aplicar las estructuras de control, aplicar paradigmas de programación, etc. 
Ahora bien para aprender a jugar bien al fútbol, tenemos que jugar, se trata de practicar y practicar, porque solo de esa forma aprenderemos y seremos buenos, no podemos ser buenos jugadores solamente viendo a los demás jugar o viendo vídeos, esto es pura teoría, entonces lo que se necesita hacer es llevar la teoría a la práctica ya que ambas se complementan. 

Para programar no existe una fórmula mágica que nos haga de un día para otro buenos programadores, porque sencillamente aprender a programar se aprende programando, al igual que el fútbol en la cancha es en donde se demuestra las habilidades que uno pueda tener con el balón, en la programación estas habilidades se demuestran dando solución a una necesidad que se nos presente o simplemente resolviendo problemas de cualquier índole. Aunque al principio el panorama no resulte claro, este poco a poco se ira aclarando conforme vayamos practicando y adquiriendo experiencia, al igual que para ser un jugador habilidoso con el balón, necesitamos de tiempo y práctica pero sobre todo de ganas o perseverancia por querer alcanzar ese objetivo, para ser un excelente programador necesitamos de eso mismo, tiempo, práctica y ganas por seguir adelante, aprendiendo cada vez más y más. Para que la programación no se convierta en algo tedioso y aburrido necesitamos verla como un hobby, se trata de amar lo que uno hace, ya que el trabajo hecho a gusto no cansa jamas, y es en este punto en donde la linea entre trabajar y diversión se vuelve muy difusa, ya que se convierte en un juego. Con constancia y disciplina lo lograremos, ya que un proverbio japonés dice: “la disciplina tarde o temprano vencerá a la inteligencia".
Al navegar por Internet muchas de las veces nos encontramos con sitios muy interesantes que vale la pena volver a visitar, o que los tengamos como referencia para cuando nos surja una duda o simplemente para aprender cosas nuevas. Por esta razón he decidido mostrar los recursos que a lo largo de este tiempo he venido usando.



  • Canales de YouTube
CodigoFacilito: a estas alturas es un canal muy conocido y que desde mi punto de vista es muy bueno, la mayoría de sus cursos son gratuitos y tienen una amplia gama de cursos a escoger.

DesarrolloWeb: es muy bueno, aunque lo que más me gusta son sus cursos tipo charla, tienen infinidad de cursos gratuitos, que en su mayoría son tratados desde lo técnico, teórico a la práctica.

xymind: lo que más me gusta de este canal es que da consejos o tips sobre programación y no solo eso, Jorge Villalobos habla en base a su experiencia.

platzi: es una canal muy conocido, pero en sí lo que más me gusta de dicho canal, son sus charlas en vivo cada jueves, a lo que ellos llaman platzilive, con este canal te enterarás de lo que está pasando en el mundo tecnológico y alguno que otra noticia.

FalconMasters: en el encontrarás temas que tienen que ver con el desarrollo web, es un canal muy bueno, lo que más me gusta es que sus tutoriales terminan aplicando lo aprendido, como por ejemplo creando una página web visual e interactiva (casos prácticos).

DevCode: al igual que el anterior esta enfocado en aplicar lo aprendido, aunque en este canal encontrarás tutoriales o cursos tanto de diseño web como de desarrollo o programación.

clipset: por si quieres estar al tanto o conocer los diferentes dispositivos que se ofertan en el mercado como smartphones, portátiles, cámaras, consolas, etc. Básicamente este canal te muestre unboxing y el análisis de los dispositivos pero desde un punto de vista divertido.


  • Sitios web
GoConqr: te permite crear mapas mentales, test, mapas conceptuales, etc.

Quizlet: la utilizo para crear vocabulario de ingles,e s muy facil de utilizar, además está disponible para android e ios, y algo que me gusta mucho es que la puedes usar sin conexión.

text2MindMap: te permite crear mapas mentales de forma rápida, es muy fácil de usar, además te permite guardar en la nube o descargar en formato pdf o jpg.

apper: para realizar videollamadas, lo que más me gusta es que no necesitar registrarte para hacer una es muy fácil de usar.

  • Páginas web para aprender programación
En este apartado no hay mucho que decir, aunque si destacar que la mayoría de ellas tienen cursos gratuitos de diferentes temas y algunas te dan un certificado digital gratis una vez aprobado el curso.










Sencillamente el mejor lenguaje de programación como tal no existe, y por esa razón que lo he puesto entre comillas, ya que todo depende de: que es lo que quieres hacer, los conocimientos y las habilidades que tengas, las necesidades del cliente, esto último es muy importante, el saber entender muy bien que es lo que quiere el cliente, debido a que muchas de la veces, dotamos al producto de funcionalidades extra (exageraciones) que al cliente no le interesan para nada y lo más importante terminamos entregando aquello que no pidió el cliente, en la siguiente imagen se puede ver claramente:



La verdad es que como desarrolladores o simplemente como amantes de la tecnología que somos, pues no deberíamos casarnos con ningún lenguaje de programación, plataforma específica o determinada tecnología en concreto. Debemos ser de mente abierta y estar dispuestos a aprender cosas nuevas, actualmente la mayoría de los lenguajes de programación son multipropósito y los podemos utilizar para cualquier proyecto, eso sí en determinadas áreas o campos, unos son mejores que otros. Una buena frase dice el pincel no hace al artista, así como el lenguaje de programación no hace al programador, aunque cabe decir que si es verdad que le ayuda a llevar sus habilidades al máximo o simplemente a hacer las cosas más rápido y de mejor forma. A manera de ejemplo y haciendo una analogía, una espada (catana) en manos de un persona común y corriente, pues por más buena que sea la espada no le va sacar mucho provecho, le servirá para cortar más rápido o inclusive puede ser una tragedia en las manos inexpertas, pero que pasa si sucede lo contrario la misma espada en manos de un experto (samurái) pues le va a sacar todo el provecho: hacer cortes más rápido, demostrar sus habilidades con la espada en una batalla, etc. En fin la cuestión es; usa el lenguaje de programación que más te gusta, el que más dominas o sencillamente el que se adapte de mejor forma a tu proyecto y no lo olvides convierte en un experto (samurái del código) ya que las espadas (lenguajes de programación) pues de una u otra forma son muy buenos, todo depende de tus habilidades, conocimientos técnicos, gustos y una vez más de las necesidades del cliente y del proyecto como tal.



Así que la pregunta más bien sería ¿Que lenguaje de programación debería elegir? , esto en base a lo antes mencionado.



Las listas de argumentos de longitud variable nos sirve para crear métodos que reciban cualquier número de argumentos. Son también conocidas como “varargs”, cabe decir que java trata a las listas de longitud variable como un arreglo.
Para crear una “varargs” en un método, lo hacemos declarando el tipo de dato y una elipsis (...) , seguido del nombre, con el siguiente ejemplo quedará más claro:



package com.unaprendiz.ejemplos;

public class ArgumentosLongitudVariable 
{
 
 //método con una varargs
 public static int sumatoria( int... numeros)
 {
  
     int total = 0;
  
     //recorrer la varargs
     for( int num : numeros)
       total += num;
  
     return total;
 }
 
 public static void main(String[] args)
 {
     int num1 = 2;
     int num2 = 4;
     int num3 = 6;
     int num4 = 8;
  
     //llamadas a sumatoria con 2, 3 y 4 argumentos
  
     System.out.printf("la sumatoria de num1 y num2 es: %d\n", 
            sumatoria(num1, num2));
  
     System.out.printf("la sumatoria de num1, num2 y num3 es: %d\n",                                      sumatoria(num1, num2, num3));
  
     System.out.printf("la sumatoria de num1, num2, num3 y num4 es: "
                       + "%d\n", sumatoria(num1, num2, num3, num4));

 }
}

La salida del programa es:

Salida del programa


La sobrecarga de métodos es tener un método con el mismo nombre que se repita varias veces, pero con las condiciones de que dicho método tenga diferentes firmas y definiciones. La firma del método es una combinación del nombre del método, número de parámetros, tipos y orden en los parámetros.

Cabe recalcar que, para que java seleccione un método sobrecargado se basa en el número y tipo de argumentos que tiene dicho método y no por su tipo de retorno (que es lo que devuelve).


import java.util.Scanner;

public class SobrecargaMetodos 
{

 public static void main(String[] args)
 {
     int num1, num2, num3;
     int opcion = 0;
  
     Scanner entrada = new Scanner(System.in);
  
     System.out.printf("Ingrese 1: Cálcular el mayor de 2 números\n"
       +"%42s", "2: Cálcular el mayor de 3 números:");
     opcion = entrada.nextInt();
  
     if(opcion == 1) {
        System.out.print("Ingrese número 1: ");
        num1 = entrada.nextInt();
        System.out.print("ingrese número 2: ");
        num2 = entrada.nextInt();
        System.out.println("El mayor es: " + numMayor(num1, num2));
   
     }
     else if(opcion == 2) {
        System.out.print("Ingrese número 1: ");
        num1 = entrada.nextInt();
        System.out.print("ingrese número 2: ");
        num2 = entrada.nextInt();
        System.out.print("ingrese número 3: ");
        num3 = entrada.nextInt();
        System.out.println("El mayor es: " + numMayor(num1, num2, num3));
     }else
        //Si se ingresa un número diferente
        System.out.println("No ha escogido ningúna opción!!!");
   
 }

 /*método sobrecargado*/
 
 public static int numMayor(int num1, int num2)
 {
     int mayor = Math.max(num1, num2);

     return mayor;
 }

 public static int numMayor(int num1, int num2, int num3)
 {
     int mayor = Math.max(num1, (Math.max(num2, num3)));
  
     return mayor;
 }
}

¿Por qué escribir código legible?


La razón por la cual debemos escribir código legible es muy sencilla, es para que otros programadores o desarrolladores nos entiendan, inclusive nosotros mismos después de volver a leer el código que escribimos hace tiempo.

Al escribir código nos convertimos no solamente en creadores de software también nos convertimos en escritores, ya que en cada línea de código demostramos nuestro estilo narrativo y nuestra prosa como tal. A manera de ejemplo, podemos pedirle a varios desarrolladores que resuelvan un problema o necesidad del mundo real y lo harán en la gran mayoría de forma diferente, esto se debe en gran medida a que el código que escribimos  es un reflejo de nuestros pensamientos y del proceso mental que se lleva a cabo.

Así que necesitamos dar a entender nuestras historias plasmadas en el código de forma clara, concisa y evitando la redundancia.

Consejos para escribir  código legible:

  • Haz que tu código se describa a sí mismo. Si haces eso no será necesario documentar tu código.
  •  Los nombres de las variables deberán ser descriptivos.
  • Sigue las pautas y convenciones de tu lenguaje.
  • Evita las abreviaciones en los nombres de variables, métodos, etc., con el cuento de ahorrar espacio o código.
  • Siempre indenta tu código, esto hará que sea más claro y legible.
  • Haz de cuenta que estás escribiendo para alguien más. Pasamos más tiempo leyendo y entendiendo código que escribiéndolo.
  • No intentes reinventar la rueda. Utiliza la biblioteca de clases o api de los lenguajes de programación.
  • Documenta solo cuando realmente sea necesario. Esto tiene que ver con la primera regla.
  • Utiliza estándares de programación.
  • Sé autocrítico con tu código.

Hay que tener siempre presente que el código legible hace que sea más fácil entenderlo, depurarlo y darle mantenimiento, con lo cual un buen código que sea legible cumple con las buenas prácticas de desarrollo de software.




En primer lugar los atributos son las cualidades o características que posee un objeto y los métodos son las acciones asociadas al objeto, es decir que es lo que puede hacer un objeto en concreto.
Ejemplo:


package com.unaprendiz.ejemplo;

public class Persona
{
    /* Atributos */
    private String nombre;
    private String apellido;
    private int edad;
    private String nacionalidad;
 
    /*Inicializa las variables de instancia */
    public Persona(String nombre, String apellido, int edad, String nacionalidad)
    {
      /*this es una referencia a si mismo
      * Es utilizado para hacer referencia a los atributos 
      * de nuestra clase en este caso la clase Persona
      */
      this.nombre = nombre;
      this.apellido = apellido;
      this.edad = edad;
      this.nacionalidad = nacionalidad;
    }
 
    /*Comportamientos*/
    public void Caminar(int direccion)
    {
       //código
    }
 
    public void Correr(int distancia)
    {
       //código
    }
 
    public void Saltar()
    {
      //código
    }
}


Es importante mencionar que a los atributos también se los conoce como variables de instancia, debido a que están asociadas a un objeto en particular, si instanciamos o creamos varios objetos de nuestra clase persona, cada uno de ellos tendrán asociado una copia de las variables de instancia.
Cuándo ejecutamos un programa Java, es posible pasarle parámetros mediante el comando java seguido del nombre de nuestro programa y una lista de parámetros.

Ejemplo:


1. package argumentos;

2. 

3. public class Saludo {

4. 

5.    public static void main(String[] args) {

6. 

7.       System.out.println("Hola: " + args[0] +" " + args[1]);

8. 

9.    }

10. }



Por convención al arreglo de String en el método principal se le llama args, aunque cabe destacar que se le puede poner cualquier nombre. Para ejecutar el programa lo harámos de la siguiente forma siempre y cuando lo hagamos desde la terminal, primero compilamos con el comando javac y después ejecutamos con el comando java:

java Saludo Maycc Suarez

La salida que muestra el programa es:

Hola: Maycc Suarez

Si utilizamos un ide como eclipse para pasarle parámetros a nuestro programa lo haríamos de la siguiente forma:
  • Hacemos clic en Run: 


  • Luego le damos a Run Configurations.. y escribimos los parámetros que vayamos a utilizar como en la siguiente captura:


  • Finalmente le damos a Run y listo:

Por regla general todos los programas escritos en java pasan por las siguientes fases: 
  
  • Edición: En esta fase creamos nuestro programa con cualquier editor de texto plano. Nuestro archivo tendrá la extensión .java; lo cual significa que es un archivo de código fuente. 
  • Compilación: Esta fase se lleva a cabo cuando compilamos nuestro archivo .java y posterior a ello se genera otro archivo con extensión .class,  el mismo que también es conocido como bytecode, que es un código intermedio que la JVM puede ejecutar. 
  • Carga: Una vez compilado nuestro programa se carga en memoria a través del cargador de clases. 
  • Verificación: Una vez que nuestro programa se encuentre en memoria el verificador de códigos de bytes, comprueba que dicho código sea valido, es decir que este bien escrito respetando la sintaxis del lenguaje  y lo más importante que no viole las restricciones de seguridad de Java. 
  • Ejecución: Una vez que todo este bien la ultima fase es la ejecución, en la cual nuestro programa será ejecutado en la JVM que es la encargada de llevar a cabo una compilación JIT (justo a tiempo).
Los modificadores de acceso nos permiten determinar desde que clase o desde que parte de nuestro programa cierto elemento podrá ser accedido o utilizado, como por ejemplo: una variable, un método o una clase, etc.

En Java existen los siguientes modificadores de acceso:
  • Private: Es el más restrictivo de todos y los elementos que hagan uso de él, solo podrán ser accedidos dentro de la misma clase. (Se aplica a los atributos o miembros de una clase, interfaces y clases internas).
  • Protected: Los elementos podrán ser accedidos desde el mismo paquete y  desde cualquier clase que extienda o herede de la clase padre, independientemente si se encuentran en el mismo paquete o no. (Se aplica a los miembros de una clase como atributos, métodos, etc.)
  • Public: Es el menos restrictivo de todos ya que se puede acceder desde cualquier parte, es decir está abierto o disponible para todos (Se aplica a clases, métodos, atributos, interfaces, etc.)
  • Default: Es el nivel de acceso por defecto, cuando no declaramos de forma explícita un modificador (no especificado), los elementos solo podrán ser accedidos dentro del mismo paquete. 

Esto se entenderá mejor en la siguiente tabla:

MODIFICADOR
CLASE
PAQUETE
SUBCLASE
TODOS (otras clases)
Private
SI
NO
NO
NO
Protected
SI
SI
SI
NO
Public
SI
SI
SI
SI
Default
SI
SI
NO
NO

 
1. package saludo;
2.
3. public class HolaMundo
4. {
5.      public static void main( String[] args)
6.      {
7.
8.          System.out.println( "Hola Mundo!!!" );
9.  
10.     }
11.}




La línea 1 es una declaración de paquete, en java los paquetes son un contenedor de clases que nos sirven para agrupar nuestras clases, interfaces o archivos. Básicamente se trata de una carpeta o grupo de carpetas.

En la línea 3 declaramos nuestra clase llamada HolaMundo, nuestro archivo deberá llamarse de la misma manera (HolaMundo.java), dado que es una declaración de clase pública.

En la línea 5 declaramos el método principal, que es el punto de entrada para ejecutar una aplicación de Java. En este caso el método se llama main, no retorna ningún tipo de información (void), además es public static (es un método de clase), ( String[] args) es el bloque de construcción de nuestro programa, se trata de un arreglo de String llamado args que nos sirve para pasar información o argumentos, cuando ejecutemos nuestra aplicación con el comando java.

Finalmente en la línea 8 hacemos uso de System.out que es el objeto estándar de salida y llamamos a un método de este objeto llamado println, que nos sirve para desplegar o imprimir un mensaje en la consola con un salto de línea.

La clase System se encuentra en el paquete java,lang que se importa de manera automática o de forma implícita en nuestras clases que creemos. 



Java es un lenguaje de programación orientado a objetos, concurrente, multiplataforma y de propósito general, cuyo lema es: "write once run anywhere", escribe una vez tu código y ejecútalo donde quieras, sin hacerle ningún tipo de modificación en la mayoría de los casos, lo cual quiere decir que es independiente de la plataforma hardware así como del sistema operativo, debido a que posee una máquina virtual (JVM), que es la encargada de interpretar los bytecodes (.class).

Originalmente fue desarrollado por James Gosling, quien es conocido como el padre del lenguaje Java., en un inicio  era conocido como Oak, posteriormente cambio su nombre a java. En sus inicios fue pensado, para crear software para electrodomésticos inteligentes de uso doméstico. Las razones por la cual se le puso el nombre de Java son varias, unos argumentan que es debido a las iniciales de sus creadores; otros señalan que si nombre se debe a un tipo de café que vendían en la cafetería de al lado, de ahí que Java tiene como icono o logo una taza de café.

Su sintaxis deriva principalmente de C y C++ y su POO está basada en Smalltalk. En la actualidad Java es utilizado para desarrollar aplicaciones empresariales a gran escala, además es el lenguaje base para desarrollar apps para Android.

Características principales:
  • Orientado a objetos. (Aunque no en un 100%).
  • Multiplataforma.
  • Fuertemente tipado. (Es necesario declarar el tipo de dato).
  • Multitarea (Hilos o Threads).
  • Biblioteca de clases extensa. (Conocida como API, nos permite ahorrar tiempo de desarrollo, al no tener que reinventar la rueda).
  • Es robusto, escalable y seguro. (La JVM verifica los bytescodes, para comprobar que no rompan o infrinjan las normas de seguridad de Java).
Conclusión:

En definitiva Java no solamente es un lenguaje de programación, es mucho más que eso; es una plataforma robusta para el desarrollo de software como tal. Diría que es como una navaja suiza, ya que es multipropósito, prácticamente se puede utilizar para hacer cualquier cosa: desde aplicaciones desktop (Java SE), apps móviles (Android), aplicaciones empresariales (Java EE). Aunque al principio la curva de aprendizaje de java es un poco alta, a medida que nos vayamos adentrando más en el lenguaje y con la práctica se nos hará más fácil desarrollar nuestro software.
Recuerden en la vida con esfuerzo, dedicación y disciplina se logran muchas cosas, la disciplina tarde o temprano vencerá a la inteligencia.

poo

La Programación Orientada a Objetos en primer lugar es un paradigma, una filosofía en la forma en que programamos. Es abstraer cualquier objeto o ente del mundo real, ejemplos: carro, persona, televisor, estudiante, cliente, etc, y plasmarlos en nuestro código.
La POO es una forma de pensar en como resolver cualquier problema o necesidad aplicando principios como abstracción, encapsulamiento, modularización, herencia, polimorfismo.

Definiciones:

  • ¿Qué es una clase?
 Una clase es un molde o plantilla a partir de la cual se puede crear objetos.
Ejemplo: La clase Carro.
  • ¿Qué es un objeto?
Es una entidad del mundo real, que posee estados (atributos) y comportamientos (métodos).  Se trata de una instancia de una clase.
Ejemplo: Un carro posee: color, marca, número de puertas ... puede acelerar, cambiar de velocidad, frenar, cambiar de dirección, etc. 
  • ¿Qué es la abstracción?
 Es extraer las características esenciales de alguna cosa, ignorando los detalles innecesarios o que sean redundantes. 
Ejemplo: Abstraer o modelar la clase Carro. (Que tiene y puede hacer un carro)
  • ¿Qué es el encapsulamiento?
 Es el proceso mediante el cual se envuelven los atributos y comportamientos de una abstracción.
Ejemplo: Poner los atributos y comportamientos de un carro en una clase, adicional se podría empaquetarla.
  • ¿Qué es el ocultamiento de información?
Ocultar los detalles de implementación.
Para llevar este proceso acabo se utilizan los modificadores de acceso.
Ejemplo: Imaginemos que tenemos un carro pues como me pertenece,  puedo saber cuanta gasolina hay en el tanque,  pero yo no puedo saber cuanta gasolina hay en el tanque del carro de mi vecino a menos que se lo pregunte. 
  • Los objetos se comunican por mensajes
Quiere decir que los objetos se envían mensajes para conocer sus estados.
Ejemplo: Cuando dos personas se conocen. La una le pregunta a la otra ¿Como te llamas? con lo cual la otra responde con su nombre.
  • ¿Qué es la modularización?
  Es el proceso a través del cual se descompone un sistema en piezas o en partes más pequeñas, cada una de las cuáles es independiente (poco acopladas) y poseen un significado propio (cohesivas)
  • ¿Qué es la herencia?
Es cuando una clase adquiere o hereda las características de una clase existente,  con la capacidad de agregar características propias. Es análogo al mundo real. Ejemplo: Cuando un hijo hereda algún bien o cosa del padre y adicional puede tener las suyas propias.
  • ¿Qué es la polimorfismo?
Es cuando un objeto se puede comportar de diferente forma según el contexto.
Ejemplo: Imaginemos que tenemos una clase llamada Figura con un método abstracto (sin implementar) llamado dibujaFigura() y varías clases que heredan o extienden de esta como: cuadrado, círculo y triángulo, con lo cual cada una de estas clases tendrá que implementar el método de la clase padre, pero con la diferencia de que la forma de dibujar será distinta para cada objeto. No es lo mismo dibujar un cuadrado que un círculo. Mediante el polimorfismo tenemos comportamientos (formas de hacer algo) distintos asociados a objetos distintos.

¿Por qué utilizar la POO?

Por que nos permite la reutilización de código, con lo cual ahorramos tiempo y esfuerzo. Hace que nuestro software sea más fácil de mantener, probar y depurar debido a que sus piezas se encuentran poco acopladas y son cohesivas es decir posee modularización. Aplicando un diseño orientado a objeto nuestro software es más robusto  además es un paradigma que utilizan varios lenguajes de programación así como Industrias del software que hacen uso de él.

Comenta con Facebook

 
© 2012. Design by Main-Blogger - Blogger Template and Blogging Stuff