Thursday, August 29, 2013

Java a lo maracucho, capitulo 3

Capitulo 3

http://www.horstmann.com/bigjava.html

Implementando Clases


Metas del capitulo

  • Familiarizarse con el proceso de implementar clases
  • Implementar metodos simples
  • Entender el proposito y el uso de los constructores
  • Entender como acceder a las "instance" variables y a las variables locales

En este capitulo se aprendera un poco sobre el como las interfaces publicas especifican la informacion que el programa debe interpretar, manipular o/y resolver. En el proceso uno va a conocer como relacionar la interface publica de una clase su diseño, el como crear sus constructores,  implementar los metodos, encapsularlos y documentarlos.

3.1  Las variables "instance"


Las variables "instance" son estas que guardan el dato especifico de cada clase, como las propiedades de la clase, creadas para guardar o señalar la propiedad de la clase.

public class Contador
{

    private int valor;

//..contructor de clase con las propiedades que sean atribuidas, en este caso la variable "instance"

}

las variable "instance" tienen un accesador especifico(private), un tipo para la variable(int), y e nombre de la variable(valor).

*Cada objeto de la clase tiene su coleccion de "instance" variables.
*Las "instance" variables del objeto guardan la informacion requerida para la ejecucion de los metodos.

3.2   Encapsulacion


Encapsulacion es un metodo de programacion que sugiere al programador ocultar todo tipo proceso para que no pueda ser publicamente modificado.

Esta forma de programar es muy importante para asegurar la informacion y saber cuando esta siendo usado dicho metodo.

Un ejemplo seria el motor del carro; en el carro existen una serie de maquinas que forman el motor, pero todas estas con exepcion de una puede ser reparada por cualquier mecanico, esta se le dice la "caja negra" una maquina que maneja el resto de las maquinas y calcula su debido comportamiento. La "caja negra" tiene los detalles necesarios para que el motor funcione adecuadamente.

Encapsulacion permite al programador usar las clases sin saber su implementacion. Como la clase StreamPrint de System.out.pritnln("Hola"); que permite usar el metodo de la clase StreamPrint sin tener que saber su implementacion.

Otro ejemplo seria el crear una clase y que el tester class pueda acceder a la clase y sus metodos sin saber como fueron implementados los metodos y su proceso interno.

Video opcional: https://www.youtube.com/watch?v=09CcotpGhqE

3.3 Especificar la interface publica de una clase.


Con el tiempo uno se dara cuenta la importancia de las interfaces y del como son extendidas a otras clases pero ahora se veran las interfaces como la clase publica usada para ejercer una tarea o funcion.

Las clases publicas pueden ser diseñadas o programadas para que hagan una tarea cuantas veces pueda, esto demuestra la funcionalidad de una interface publica de la clase crear como una clase generica que repita el mismo tipo de metodos para sus espeficicas funciones a multiples usuarios.

Por ejemplo, una interface publica de una clase puede ser la cuenta de banco, diseñada por los programadores de un banco que quieran que cada cliente pueda acceder a la cuenta, ver su estado actual, ademas de retirar y guardar creditos, todo diseñado en una clase publica llamada CuentaBancaria.

CuentaBancaria es una clase publica que se usa como interfase generica dado la simplicitud de sus funciones y de sus metodos, con el tiempo se vera el como implementar o extender este tipo de clases por medio de otras subclases y adicionarles mas metodos, etc, y el como crear una interface que solo use unos metodos unicos, genericos, para la implementacion de otro tipo de clases que llame a la interface. Algo mas adelante, segun el libro y el conocimiento que uno tenga.

*Cuando uno va a crear una clase o diseñar una clase uno tiene que saber que metodos seran usados, y que metodos pueden ser reusados para la simplicidad del programa y la rapidez de este.

3.3.1 Tipos de Metodos


  • Estan los metodos que retornan algo debido a su tipo, denominados "accesors" y se especifican por el tipo de valor que retornaran, ejemplo: "double"
  • Estan tambien los metodos que manipulan informacion pero no retornan nada, denominados "mutators" y se especifican por la palabra reservada "void"

3.3.2 Constructores


Los constructores son los que crean al objeto y le dan sus datos predeterminados. los Constructores tiene dos espeficicaciones importantes.

  • Tienen el mismo nombre de la clase
  • No retornan ningun tipo de informacion y no llevan ningun tipo de espicificacion, ni "void"

Otra de las cualidades de los contructores es la forma de construirlos. Tienen dos formas generales de hacerlos.

  • Los que no tienen nada en el parametros y son creados con una informacion predeterminada.
  • Los que tienen algun tipo de parametros establecidos y pueden llevar un tipo espeficico de informacion al construirse.

por ejemplo: 

public class CuentaBancaria
{
     private instance variables - se llenan luego
     //constructor
     public CuentaBancaria()
     {
     private instance variables = 0;
     }
     public CuentaBancaria(double balanceInicial)
     {
     private instance variables = balanceInicial;
     }
}

En otras palabras, cuando empiezan a programar: al crear una clase siempre ver que tipo de "instance" variables necesita, los constructores, y los metodos, con esto ya lo demas es pura logica, algoritmo y creatividad. Palabras personales:  priotizar lo mas importante entre el estudio, el area social y la vida personal, el balancearlo mediante la personalidad de uno y el no dejarse llevar por nadie mas que aquellos que verdaderamente lo pueden ayudar, uno siempre creara situaciones donde aprenderan de los problemas.

3.4 Javadoc


A la hora de programar, del ya saber que metodos usar y que hacer, lo siguiente es documentarlo todo, con el tiempo se vera como Javadoc sera muy util y el como los comentarios adicionales en el programa tambien.

Javadoc es el programa que permitira documentar las clases, sus objetos y metodos, dandoles la informacion de cada funcion para la facilidad de cualquier programador poder entender el programa y sus funciones. Ver video: https://www.youtube.com/watch?v=OfOz-hbntu0


Pagina para bajar el programa Javado directo de Oracle, o si se usa netbeans, ya esta instalado y para ver como se pueden generar documentos Javadoc, vease el video.

"Javadoc es una utilidad de Oracle para la generación de documentación de APIs en formato HTML a partir de código fuente Java. Javadoc es el estándar de la industria para documentar clases de Java. La mayoría de los IDEs los generan automáticamente.

Javadoc también proporciona una API para crear doclets y taglets, que le permite analizar la estructura de una aplicación Java. Así es como JDiff puede generar informes de lo que ha cambiado entre dos versiones de una API."

http://es.wikipedia.org/wiki/Javadoc

*Javadoc es la misma documentacion usada por el API: http://docs.oracle.com/javase/6/docs/api/

3.5 Creando la implementacion de la clase


Una clase se puede ver como el objeto y sus funciones, por ejemplo un carro y lo que hace el carro.

/** implementacion de la clase carro con sus propiedades
*@author x
*/

public class Carro
{

//instance variables

     private string color;
     private String modelo;

//constructor

     public Carro()
     {
          color = negro;
           modelo= simple;
      }// fin del constructor

//metodos

     @param cambia el color del carro
     public void colorCarro(string color)
     {
       this.color = color;
      }//fin del metodo colorCarro
   
     @param cambia el modelo
     public String modeloCarro(String modelo)
     {
     this.modelo = modelo;
     return this.modelo;

     }//fin del metodo modeloCarro

}//fin de la clase Carro

3.6 Creando una clase de prueba o "Tester Class"


Las clases todas son parte del programa y todas tienen su funcion, por lo mismo para ver si las clases funcionan como deben el programador puede crear una clase "main" o principal para probar si la clase funciona como debe y esta es una clase aparte dentro del mismo paquete que crea objetos y llama a las funciones.

/**
Una clase para probar la clase Carro
*/

public class CarroPrueba
{

   /**
   prueba los metodos de la clase CarroPrueba
   @param args no son usados
   */

   public static void main(String[] args)
 
   private string modelo = "";
   Carro cliente = new Carro();
   cliente.colorCarro("Dorado");
   modelo = cliente.modeloColor("2013");

   System.out.println(cliente.color + " " + modelo);

}//fin de la clase de prueba

En esta clase de prueba use varias formas de programar para representar el uso de las variables de las clases creadas y el como guardar la informacion generada en los metodos de las clases creadas en las clases del CarroPrueba, otro metodo de programar. para otro ejemplo vease el link: http://www.horstmann.com/bigjava.html donde dice "Source code for all sample programs" que significa, fuente del codigo de los ejemplos de las clases, objetos y metodos planteados.

3.7 Variables locales


Las variables locales son las variables declaradas en el cuerpo del metodo.

"Lenguajes orientados a objetos más estrictos y formales tales como Java y C#, no permiten la declaración de variables locales estáticas en una función. En estos lenguajes las variables "estáticas" se restringen al ámbito de la clase." http://es.wikipedia.org/wiki/Variable_local

Vease tambien: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

Tarea: De que se trata la referencia "this" como variable y como constructor?

Monday, August 19, 2013

Java a lo Maracucho, Capitulo 2

Referencias:

Capitulo 2


Metas del capitulo


  • Aprender  acerca de las variable
  • Entender el concepto de las clases y los objetos
  • Poder llamar metodos
  • Aprender acerca de los parametros y los valores del resultado
  • Entender la diferencia entre objetos y la referencia de los objetos
  • Escribir programas que muestren formas simples

Los programas de hoy en dia son complejos y a su ves genialmente diseñados de una forma simple y eficiente. El estudiar programacion es para todos, no significa que uno va a llegar a las grandes ligas, pero te da trabajo y es necesario aprender en un mundo donde la informacion esta al alcance de todos.

Por lo mismo, lo que haga aqui es mas que todo personal, una forma de aprender acerca del lenguaje Java, ademas a recuperar lo aprendido en la universidad, traduciendo los capitulos del libro Big Java, indagando un poco sobre las definiciones y de donde vienen, entre otras referencias, por el simple hecho de que la informacion es nuestra herramienta para poder armar una sociedad mas humana y menos salvaje.

2.1 Que es un objeto?

http://docs.oracle.com/javase/tutorial/java/concepts/object.html

Los Objetos son la clave para entender la programacion orientada por objetos. Todo en si es un objeto: un carro, un payaso, un tiburon, una bicicleta.

Todos los objetos comparten dos caracteristicas: el estado, por medio el cual se diferencian entre los demas objetos, por ejemplo; un payaso tiene pintada la cara, es un artista, de la especie humana, etc. con un comportamiento, pues nos hace o llorar o reir, canta, baila, come, duerme, etc .

para implementar tal ejemplo y saber que estado o comportamiento tiene cada objeto se puede preguntar antes de diseñar un programa. cuales son los atributos o estados que quiero que tenga el programa? y que quiero que haga el programa? por ejemplo; un semaforo, tiene tres luces, esta en una calle. su comportamiento: prende cada luz por tiempo, necesita energia, y a las 12 am empieza a titilar.

Para la programacion, el estado del objeto se guarda en las variables o campos, y expone su comportamiento por medio de los metodos o funciones. Los metodos operan dentro del estado interno del objeto y sirven como mecanismo primario para la comunicacion entre objeto-a-objeto.

OJO, con el tiempo esta definicion tendra bastante relevancia en la practica.

Escondiendo el estado interno y requiriendo que toda interaccion sea trabajada a traves de los metodos del objeto es comunmente llamada encapsulacion de los datos. -un principio fundamental para la programacion orienada en objetos.

El atribuir estados al programa, como el numero de velocidades de un carro o moto, etc, le da la capacidad al caomportamiento, atraves de los metodos, de cambiar sus velocidades mientras sea intruida hacerlo.

2.2 Variables

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

Los objetos guardan sus estados en los campos o variables, dependiendo del programa o del diseñador.

int velocidad = 0;
string luz = "verde";

Cuando se crean variables, o campos, se deben iniciar y declarar, sea con una caracteristica nula o con lo que el programador quiera que tenga como estandar.

Las variables o campos tienen varios usos y varios tipos, cada uno importante saber de donde vienen y saber su terminologia.

2.2.1. Tipos de Variables


http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

  • Variable de instancia(Campos No-estaticos ): son las variables o los campos unicos a cada instancia de la clase, independientes de otras clases. Variables que cambian por cada vez que se usa la clase para cada tipo de instancia o objeto similar, se vera cuando se trabaje con las herencias, recurciones, etc.
  • Variables de Clase(Campos estaticos): variables unicas de la clase, variables que a pesar de que las clases sean iniciadas, permaneceran iguales, dado si estado iniciado. Las variables estaticas pueden ser constantes cuando ademas estan definidas con la palabra reservada final usada para datos constantes. pi, entre otros.
  • Variables locales: son aquellas iniciadas dentro de los metodos, para poder trabajar con una libertad independiente dentro de los metodos. ejemplo;  la variable que cuenta.
  • Parametros: las variables tambien estan dentro de los parametros, como la de args eso es una variable iniciada, o la del for loop (int i = 0; i<10; i++) aqui "i" esta iniciada y todo.

El como nombrar a una variable tiene importancia para el programador como para quien tenga que trabajar en el futuro con el programa. Por lo general se nombran las variables por el atributo que vayan a hacer, y lo mas corto posible, SIEMPRE, comenzando por letra pequeña. Si esta compuesta por dos palabras, la primera pequeña, la segunda mayuscula.

Para un atributo como el de calcular el numero de veces que Cabrera se embaso, uno puede crear una variable similar :

Primero el tipo de variable, en este caso "int", luego el nombre de la variable:

int basesCab = 0;

Se inicia con 0 porque al comienzo Cabrera tenia 0.

Para las constantes es importante que todas sean capitulizadas.

Pl numero constante de algo.

int NUM_VEL = 6;

Las letras mayusculas al comienzo se escriben para diferenciar las clases de las variables, solo para que el programador sepa cuales son.**pero con el tiempo se vera porque.

2.3 Tipos de asignacion para las variables


Para aprender sobre cualquier lenguaje es recomendable saber sobre su terminologia. En este caso aprender sobre los conceptos de los tipos de datos que se van a manejar o manipular, sus variables o variables y su asignacion o tarea.

Un programa de computadora procesa valores: numeros, "strings"o cuerdas, y datos mas complicados. Cada dato tiene un tipo.

Los tipos espeficican la coleccion de valores o datos y las operaciones que pueden ser procesadas por los valores o datos.

Los tipos de datos de cuerda o  "string" son todos estos datos en forma de letras o palabras que forman una especie de cuerda o "string". Las cuerdas o "string" se diferencian en llevar comillas(""), dentro de las comillas el compilador las traduce como cuerdas o "string", por ejemplo; "Hola" es un string, pero Hola no lo es. Tienen que estar dentro de las comillas.

Otros tipos son de tipos de datos son los datos primitivos, de numeros, como el int y el double. El int son los famosos numeros enteros, pueden ser positivos o negativos, y los double, son aquellos que tienen fracciones
.

2.3.1  Tipo de Datos Primitivos para las variables


http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Las variables tipo de datos primitivos son todas aquellas que tienen numeros y cada tipo dato puede guardad una cantidad de bits en la memoria. Ya que el JVM asigna una serie de espacios en la memoria para que esos datos sean guardados. Se entiende mejor cuando se sabe un poco sobre el como el proceso del como los lenguajes de maquina guardan la informacion. vease. Introduccion los sistemas de computacion.

Todos estos tipos de variables son reservados, por lo mismo tiene que ser escritos de tal forma. Al tiempo uno podra crear cualquier tipo como quiera, pero ahora esto es asi hasta avanzado y cambiado por el entendimiento de la programacion y la manipulacion de datos, etc.

Representacion de signo: http://es.wikipedia.org/wiki/Representaci%C3%B3n_de_n%C3%BAmeros_con_signo


  • byte = 8 bit con representacion de signo = -128 inclusivo a 127
  • short = 16-bit con representacion de signo = -32,768 inclusivo 32,767
  • int = 32-bit con representacion de signo -2,147,483,648  inclusivo 2,147,483,647
  • long = 64-bit con representacion de signo  -9,223,372,036,854,775,808 inclusivo 9,223,372,036,854,775,807
  • float = 32-bit IEEE 754 floating point, numeros fuera de la mira de discusion
  • double = 64-bit IEEE 754 floating point, numeros fuera de la mira de discusion


Otros tipos de variables reservadas son los sigientes:

Se vera que estos datos primitivos guardan simbolos, pero los simbolos estan formadas por numeros hexadecimales, descrito por la tabla Unicode.

Tabla Unicode: http://en.wikipedia.org/wiki/Unicode

  • char: es un tipo de dato simple del sibolo de 16-bit Unicode. Con un valor minimo de '\u0000' igual a 0, y un valor maximo de '\uffff' igual a 65,535 inclusive.

El otro dato primitivo es el boolean.

  • boolean: guarda dos datos, las palabras reservadas true y falsa. Que se usan para comparar datos, cuyos tienen que tener la misma informacion dependiendo del estado y la caracteristica programada.

2.3.2. El operador que asigna 


El operador(=) es quien le asigna los datos a la variable, pero antes la variable tiene que estar inicializada con un dato predeterminado, o nulo, por el mismo JVM.

int num =  0;
o
int num;

es recomendable siempre que se inicialize con "0" o algo predeterminado, asi no habra problemas con los datos que tenga, como reinicializar la variable a un estado determinado por cada operacion.

otra cosa muy importante, es el tipo de data que recibira la variable, siempre es importante declararla para el uso que se le vaya a dar, pero siempre se puede (cast), o usar de esa forma para algunos usos. depende del nivel de programacion se sabra con el tiempo.

ah, algo ahi, no se puede inicializar la misma variable dos veces, solo una, pues que el compilador encontrara un error, syntax error ya que no reconocera la variable con el mismo nombre como legal.

2.4 Objetos, Clases y Metodos


  • Objetos: Son entidades del programa que se manipulan llamando a los medotos.

http://docs.oracle.com/javase/tutorial/java/javaOO/objects.html

  • Metodos: Son una serie de instrucciones que accesan la informacion al objeto.
  • Clases: La clase declara al objeto que se le puede aplicar a los objetos.

En cierta forma los objetos son en si el nucleo del programa, por donde el programador puede llamar a los metodos que manipulan la informacion recibida mediante a la clase creada.

Las Clases son el tipo del Objeto, como las variables tienen tipo int o double, la clases son para los objetos.

Un ejemplo es el:

System.out.println("hola");
el "System.out" es el objeto de la clase PrintStream. hola tambien es un objeto per de la clase String.

Para mejor informacion uno tiene que saber que son las subclases y las clases heradadas, luego con el tiempo se entendera un poco. Ya que el "System.out" viene primero de la clase "System" pero esta tiene otra subclase denominada "PrintStream" con los mismos atributos de la clase "System" pero con los de la clase "PrintStream". Para que se hace esto? para facilitar la utilizacion y la modificacion de la informacion.

El "out" es una descripcion y campo de la clase de tipo PrintStream.

El metodo es tipo String de la clase String.

vease: http://docs.oracle.com/javase/7/docs/api/java/lang/System.html

2.5 Parametros del metodo y valores de retorno


Los parametros por lo general son los que reciben la informacion al metodo, ya que pueden haber parametros sin ningun tipo de informacion y los metodos retornen algo.

Hay dos tipos del como los metodos son llamados, uno el implicito, aquel donde el programador llama al metodo y le da en los paremetros el tipo de informacion que puede recibir. El otro, son los metodos del objeto que son llamados por el objeto en si, pero todo y eso el programador como siempre tiene que diseñarlo de esa forma, al menos de que ya esten diseñados por otro programador o por el programa.

El valor del retorno es el resultado que el metodo a computado para el uso de cuyo codigo a sido llamado. Es decir, el resultado que computo el metodo gracias a la informacion obtenida de sus parametros, o del objeto en si, como los datos dentro del objeto.

Ejemplo, se crea un objeto y se le dan unos valores, luego el metodo transforma esos valores dada la informacion dentro del parametro y computa un resultado guardandolos en una variable.

DataSet data = new DataSet(100);

//inicializacion del constructor del objeto, luego en el capitulo 3

public int estudios(int num)
{
int temp = 0;
temp = num;
return  num;
{

int classVariable = 0
classVariable = data.estudios(100) + data.variable;

System.out.println(classVariable);

2.6 Construyendo objetos


http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

Como pueden imagina, las clases son el plano para los objetos, de las clases salen los objetos y de ahi los objetos llaman a los metodos y modifican los objetos.

Punto origenUno = new Punto(23, 94);
Rectangulo rectUno = new Rectangulo(origenUno , 100, 200);
Rectangulo rectDos = new Rectangulo(50, 100);

Aqui se ha creado un nuevo punto de partida para crear un rectangulo. Luego se han creado dos rectangulos , el rectUno, con un punto de origen que tiene la informacion del punto de origen o punto de partida ya creado y el segundo rectangulo sin punto de origen o partida.

Cada declaracion tiene tres partes:

  • Declaracion: Es el codigo asociado con la variable, lo que le da el nombre y tipo de la variable. por ejemplo; Rectanguo rectUno;
  • "Instantiation": la palabra reservada "new" crea el objeto.
  • Iniciacion: El operador new lo sigen un constructor, cuya funcion es la que inicia el nuevo objeto.

Declarar a una variable para iniciar un objeto

http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

  • El tipo de la variable: La variable tiene que tener el tipo de informacion semejante al tipo de la variable. Esto hace que cuando se declare sea reservada la memoria en su sitio adecuado. Como especificar el tipo de casilla que uno puede ponerle todos los datos similares.

Por ejemplo; Punto origenUno;

De esta forma uno no esta creando el objeto, sino que la referencia del objeto, por lo tanto no habra informacion sino que solo estara refiriendose a algo que no existe, por lo mismo estara nula la referencia.

Para que la referencia tenga su informacion se debe crear cuando se inicialize y tenga ya el operador "new" luego del objeto creado y su construccion deseada.

Es muy importante recordar. Declaracion, Instantiation y Iniciacion. la primera declara el tipo de variable que se quiere tener la informacion, el segundo crea el objeto,  y el tercero inicia el objeto dandole el valor deseado.

public class Punto {
    public int x = 0;
    public int y = 0;
    //constructor
    public Punto(int a, int b) {
        x = a;
        y = b;
    }
}

Esta clase tiene un constructor, crea usando sus parametros, iniciadas las variables de tipo int a y b, para recibir la informacion y luego ser asignadas a las variables de la clase o del objeto que se va a crear.

Punto origenUno = new Punto(23, 94);

La variable origenUno indica al objeto Punto.

public class Rectangulo {
    public int ancho = 0;
    public int alto = 0;
    public Punot origen;

    // cuatro constructores
   //?por que se crean cuatro constructores?
   //porque de esa forma el programador puede modificar, introduciendo informacion dentro
   // de los parametros, al metodo.

    public Rectangulo() {
        origen = new Punto(0, 0);
    }
    public Rectangulo(Punto p) {
        origen = p;
    }
    public Rectangulo(int w, int h) {
        origen = new Punto(0, 0);
        ancho = w;
        alto = h;
    }
    public Rectangulo(Punto p, int w, int h) {
        origen = p;
        ancho = w;
        alto = h;
    }

    // metodo para mover el rectangulo
    public void move(int x, int y) {
        origen .x = x;
        origen .y = y;
    }

    // un metodo para computar el area
    public int getArea() {
        return ancho * alto;
    }
}

Rectangulo recUno = new Rectangle(origenUno, 100, 200);

Ejemplohttp://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

foto de la pagina de Oracle: http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

?que pasa aqui?
Se crea un objeto Rectangulo con el origen uno ya creado anteriormente y se le inicializa con La informacion correspondiente.

Rectangulo RecDos = new Rectangle(50, 100);

Lo mismo aqui pero sin el punto, ya que se crearon varios constructores con varios atributos.

Rectangle rect = new Rectangle();

Y aqui no pasa nada, pero ya esta inicializado asi que retorna o apunta a un rectangulo sin nada. de 0 0 informacion.




Friday, August 16, 2013

¿Qué es GNU?


¿Qué es GNU?

link: http://www.gnu.org/home.es.html

GNU es un sistema operativo similar a Unix que es software libre y respeta su libertad. Puede instalar versiones de GNU (más precisamente, sistemas GNU/Linux) que son completamente software libre.

Capturas de pantalla de GNU

El Proyecto GNU se inició en 1984 para desarrollar el sistema GNU. El nombre «GNU» (que significa «ñu» en inglés) es un acrónimo recursivo de «¡GNU No es Unix!» y en español se pronuncia fonéticamente como una sílaba sin vocal entre la g y la n.

Los sistemas operativos similares a Unix se construyen a partir de un conjunto de aplicaciones, bibliotecas y herramientas de programación, además de un programa para alojar recursos e interactuar con el hardware, denominado núcleo.

Hurd, el núcleo propio de GNU, está lejos de poderse usar en el día a día. Por este motivo, GNU se usa habitualmente con un núcleo denominado Linux. Esta combinación es el sistema operativo GNU/Linux. GNU/Linux lo usan millones de personas, aunque muchos lo denominan «Linux» por error.

¿Qué es el software libre?

link: http://www.gnu.org/philosophy/free-sw.es.html

El «Software Libre» es un asunto de libertad, no de precio. Para entender el concepto, debe pensarse en «libre» como en «libertad de expresión», no como en «cerveza gratis».

El software libre es una cuestión de libertad de los usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y modificar el software. Más concretamente, se refiere a los cuatro tipos de libertades para los usuarios de software:

La libertad de usar el programa, con cualquier propósito (libertad 0).
La libertad de estudiar el funcionamiento del programa, y adaptarlo a sus necesidades (libertad 1). El acceso al código fuente es un prerrequisito para esto.
La libertad de distribuir copias para ayudar a los demás (libertad 2).
La libertad de mejorar el programa y de publicar las mejoras, de modo que toda la comunidad se beneficie (libertad 3). El acceso al código fuente es un prerrequisito para esto.




Wednesday, August 7, 2013

Java a lo maracucho, Capitulo 1

Source: http://www.horstmann.com/bigjava4.html

Capitulo 1


Metas del capitulo



  • Entender la actividad del programar
  • Aprender la arquitectura de las computadoras
  • Aprender los codigos  de la maquina y los lenguajes de programacion de alto-nivel
  • Familiarizarse con la estructura simple de los programas de Java
  • Compilar y funcionar vuestro primer programa en Java
  • Reconocer los errores de "compile-time" o los de "run-time"
  • Escribir pseudocodigos para algoritmos simples


El proposito de este capitulo es el de familiarizarse con los componentes de la computadora, cuales son sus partes y sus funciones, a la vez del aprender un poco sobre el como la computadora recibe las instrucciones diseñadas para su funcionamiento y calculo. Luego de aprender un poco sobre los componentes de la computadora y el como funciona, la otra parte del capitulo es el aprender un poco sobre el lenguaje de programacion Java, sus mas simples comandos y los tipos de errores que pueden pasar cuando se crea o diseña un programa. Finalizando con algunos tips sobre como empezar a diseñar el programa creando pseudocodigos para los algoritmos simples.

1.1 Que es la programacion?


Source: http://es.wikipedia.org/wiki/Programaci%C3%B3n
Source: http://es.wikipedia.org/wiki/M%C3%A1quina_de_Turing

La programacion es el arte del diseñar por medio de codigos las instrucciones que debe hacer la maquina o el programa; la maquina en general esta programada por medio de codigos de maquina, de 0s y 1s, y el programa, ya que primero tiene que haber una maquina, con un lenguaje mas avanzado.

Un programa de computadora debe de estar programado para hacer una tarea, diferentes tareas requieren diferentes programas. por lo menos, los sistema operativos son un programa en si que dan una tarea en si, dentro del sistema operativa hay otros programas que dan diferentes tareas, y asi sucesivamente.

Un programa de computadora contiene todas las instrucciones en secuencia que puede ejecutar.

La programacion en si es la instruccion que tiene el programa o maquina, por ejemplo; un semaforo esta programado para que por tiempos, automaticamente, se prenda el verde, luego el amarillo y luego el rojo, infinitas veces. En un programa, las instrucciones pueden ser simples; como el sumar, como complejas; el tomar la informacion de millones de personas guardadas en una base de datos y buscar a todos los que tengan el pelo negro, pero primero se tiene que diseñar el programa y darle una serie de instrucciones para que no se tarde tanto tiempo y sea lo mas eficientemente posible.

Por otro lado, los hacker ciberneticos, o los que clonan o ponen chips en las consolas de videos, estos saben muy bien el diseño de las maquinas y los programas, y en varios casos alteran la maquina para que omita una instruccion, o alteran otra instruccion para que de otro tipo de informacion. Ademas eso es otro tema u otra ideologia, como puede ser el hacktivismo, algo que no se en absoluto pero ha creado un nuevo campo de expresion donde las personas pueden defenderse de los programas totalitarios que estan siendo implementados en el mundo, creados supuestamente, o para mantener la seguridad o para controlarnos, eso depende de quien sepa de politica a su vez del uso de la programacion como herramienta politica, criminalizada por la misma dependencia tecnologica que tenemos hoy en dia y no todos tenemos la misma ideologia, algo relevante segun el estilo de vida que uno viva o donde viva.

-Para entender un poco mas sobre las computadoras, es bueno preguntarse que es un programa y que no?

-O como funciona una aplicacion de telefono?

-O, se puede mejorar un programa como Windows, Linux, ios?

1.2 La anatomia de la computadora


Para entender mejor el como esta compuesta la computadora y el como operan sus partes, recomiendo que busquen informacion sobre la introduccion a los sistemas de computadora. Si saben ingles, busque este libro:

Source: http://highered.mcgraw-hill.com/sites/0072467509/

aqui hay unos power point que resumen cada capitulo:

Source: http://highered.mcgraw-hill.com/sites/0072467509/student_view0/powerpoints_nc_state.html

Es recomendado entender los 8 primeros capitulos, y para mejorar sus conocimiento, el resto.

Este libro presenta los conceptos basicos de la computadora, sus componentes y el como funcionan, ejemplificadas por medio de una mini-computadora de 16bits cuyo proposito es el entender el como son transmitidas las intrucciones, como son creadas las instrucciones, donde guardan las intrucciones en la memoria y el como modificar las instrucciones para generar cualquier resultado, o tarea intruida.

En fin los ordenadores con esta arquitectura constan de cinco partes: La unidad aritmético-lógica o ALU, la unidad de control, la memoria, un dispositivo de entrada/salida y el bus de datos que proporciona un medio de transporte de los datos entre las distintas partes.

Un ordenador con esta arquitectura realiza o emula los siguientes pasos secuencialmente:

Enciende el ordenador y obtiene la siguiente instrucción desde la memoria en la dirección indicada por el contador de programa y la guarda en el registro de instrucción.

Aumenta el contador de programa en la longitud de la instrucción para apuntar a la siguiente.

Decodifica la instrucción mediante la unidad de control. Ésta se encarga de coordinar el resto de componentes del ordenador para realizar una función determinada.

Se ejecuta la instrucción. Ésta puede cambiar el valor del contador del programa, permitiendo así operaciones repetitivas. El contador puede cambiar también cuando se cumpla una cierta condición aritmética, haciendo que el ordenador pueda 'tomar decisiones', que pueden alcanzar cualquier grado de complejidad, mediante la aritmética y lógica anteriores.

1.3 Traduciendo los programas a codigos de maquina


Al estudiar los fundamentos de los sistemas de computacion, uno debe de saber que una maquina de 16 bits en sus "registers" tendra solo 16  "registers" especificos, ya que solo se usan los 4 primeros bits del register para localizar el tipo de funcion que va a hacer la instruccion. "16-bit addressable memory with a 216-location address space." una memoria accesable de 16-bit con una localizacion del espacio accesable de 216. 

Sabiendo esto, las computadoras contemporaneas tienen cientos de "registers" cada uno con distintas funciones, y esto predispone al programador a equivocarse, por lo mismo se creo un JVM y compiler que transforman, cada uno complementando al otro, las instrucciones faciles de entender a los codigos de la maquina.

En el lenguaje de programacion Java, toda fuente de codigo esta primeramente escrita dentro de los archivos simples de texto que terminan con la extension ".java" Luego estos archivos son compilados a archivos ".class" por el "compiler" "javac". Los archivos escritos en ".class" no contienen los codigos nativos del procesador, no los entiende, los contiene como "bytecodes" - el lenguaje de maquina de la Maquina Virtual Java o JVM.

El JVM es un programa que traduce, o transforma la informacion o instrucciones que el compiler reviso y transformo del programa principal, en este caso, el programa que te facilita diseñar programas, a los codigos de maquina, para asi poder hacer todo tipo de tarea en la computadora*.

El compiler es otro programa que a lo largo de la carrera de computacion se entendera su complejidad y su manejo, tanto asi que para la maestria, dependiendo de  que clase agarres, puede que te pidan diseñar un compiler.

Source: http://es.wikipedia.org/wiki/JVM
Source: http://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html

1.4 El lenguaje de programacion Java


Source: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-1.html#jvms-1.1

Este lenguaje de programacion es util si quieres estudiar y aprender los fundamentos de la programacion, el como se crean buenos programas, faciles y claros, para luego darle como una introduccion a otros lenguajes, en cual c++ parece tener mayor relevancia en el area de la programacion, no tanto por su complejidad, sino por su forma que especificar todo tipo de instruccion, lo cual hacerlo, define el nivel de manejo que el programador tiene a la hora de programar. Por eso todas las universidades comienzan con Java y luego se van a c++.

1.4.1 Comienzos de Java


Java se creó como una herramienta de programación para ser usada en un proyecto de set-top-box en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991. El equipo (Green Team), compuesto por trece personas y dirigido por James Gosling, trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo.

1.4.2 Filosofia de Java


El lenguaje Java se creó con cinco objetivos principales:

Debería usar el paradigma de la programación orientada a objetos(Objetos Orientados).

Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos.

Debería incluir por defecto soporte para trabajo en red.

Debería diseñarse para ejecutar código en sistemas remotos de forma segura.

Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++.

Para conseguir la ejecución de código remoto y el soporte de red, los programadores de Java a veces recurren a extensiones como CORBA (Common Object Request Broker Architecture), Internet Communications Engine o OSGi respectivamente.

Source: http://es.wikipedia.org/wiki/Java_(lenguaje_de_programaci%C3%B3n)
Source:  http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-1.html#jvms-1.1

1.4.2.1 Que son los objetos Orientados?


Los objetos son entidades que tienen un determinado estado, comportamiento (método) e identidad:


  • El estado está compuesto de datos o informaciones; serán uno o varios atributos a los que se habrán asignado unos valores concretos (datos).


  • El comportamiento está definido por los métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él.


  • La identidad es una propiedad de un objeto que lo diferencia del resto; dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).


Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos.

Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.

Source: http://es.wikipedia.org/wiki/Orientado_a_objetos

1.5 La estructura de un programa simple


Cuando uno comienza a estudiar un lenguaje de computacion nuevo, es siempre la norma aprender a escribir una frase, como por ejemplo; "bienvenido a la programacion".

1  public class HelloPrinter
2  {
3        public static void main(String[] args)
4        {
5               //  caracteres para comentar sobre el programa
6
7               System.out.println("bienvenido a la programacion");
8         }
9  }

Cuando se crea un archivo, tambien se crea una clase con el nombre del archivo. Esta "clase" como se ven en la linea 1, tiene una palabra denominada "public". "public" significa publica, y tambien hay unas clases que son privadas o "private" que solo pueden ser accesadas por el mismo archivo o clases del mismo nombre, y esto se hace para asegurar el programa de fuentes externas, pero esto se vera mas lejos y con mas entendimiento sobre Java y los fundamentos de la programacion.

La linea 2 comienza con unos braquets "{"  esto significa que debe tambien cerrarse "}". Las clases son objetos que deben de tener instrucciones, y la forma del saber las instrucciones a seguir estan señaladas dentro de los braquets "{instrucciones}". sean clases, metodos o interfaces.

En la linea 3 la primera instruccion escrita es el metodo "public" , "static", "void" llamado "main" que tiende dentro de sus parametros "()" el tipo de datos o "data types" del objeto"[]" "args" que va a entrar, para luego hacer lo descrito por este metodo prediseñado ya por el lenguaje de Java, y gracias a esto devolvera, si el syntax o la logica estan correcto, una respuesta esperada.

Por supuesto, esto sera tambien entendido mientras mas caves dentro de la tierra del conocimiento.

En la linea 5 se ve la forma de comentar dentro de un programa sin afectar las instrucciones del programa. hay dos formas, esta la de una linea, que es "//" o la de un parrafo que tiene comienzo y final, si los colocas mas, el compilador no podra traducir las instrucciones sigueintes, ya que no las entendera e inmediatamente se parara.  abre con "/*" y cierra con "*/" sin comillas por supuesto.

En la linea 7 se ve "System.out" que es el nombre de la clase que se quiere invocar para luego, invocar el nombre del metodo "println" cuyos parametros "()" luego prodras escribir lo que quieras que el metodo "println" este diseñado a hacer.

El metodo "println" te permite imprimir cualquier tipo de letras "strings" que esten marcadas  con comillas "", ademas de que tambien puede calcular operaciones basicas de matematica.

Por ejemplo; System.out.printl("Hola"); imprimira Hola y System.out.printl(3+3); imprimira 6.

Otra cosa es que toda instruccion que tenga una informacion para analizar debe terminar con un punto y coma ";" para que el "compiler" sepa que hay termina la instruccion.

Esta informacion es mas especifica, del como el programa trabaja:
Source: http://docs.oracle.com/javase/tutorial/getStarted/cupojava/netbeans.html

1.6 Compilando y funcionando un programa de Java


Hay varios editores para que la creacion de los programas sea mas sencilla. Esta Netbeans que se puede descargar en su pagina de internet gratuitamente

https://netbeans.org

El programa tiene muchas funciones que facilitan y demuestran cada instruccion, marcadas a priori.

Esta tambien Eclipse: http://www.eclipse.org
Jagrasp, que es sencillo: http://www.jgrasp.org
y para los mas duros, directo del "command prompt" donde solo necesitas tener un notepad, el Java Development kit (JDK) y el manejo de los archivos para eso:
Source :http://docs.oracle.com/javase/tutorial/getStarted/cupojava/win32.html

*Ojo, todos los editores necesitan del JDK, en este esta el compiler entre otras mas utilidades necesarias para el JVM.

Source: http://docs.oracle.com/javase/7/docs/technotes/tools/index.html#general

*El programa es sensible al uso de caracteres, por ejemplo; no es lo mismo "a" que "A", y esto se sabe cuando se estudia un poco el como estan codificados los caracteres ACSII.

Source: http://es.wikipedia.org/wiki/ASCII

Todo esto define la ubicacion de la referencia en la memoria o la informacion en la memoria, dependiendo del "register" que se use.

TIP: Cuando se este diseñando un programa o se haya terminado o como quieras, siempre ten el archivo del programa guardado como respaldo porsiacaso le pasa algo al archivo o programa original, o cuando se trabaje en este y se borre por error.

1.7 Errores


Hay dos tipos de errores cuando se programa, uno es el error de sintaxis, este que pasa cuando se escribe algo que no este definido o se omite, llamado "compile-time". El otro error es de logica. Cuando describen erroneamentes los pasos que un programa sigue o cuando el resultado no se asemeja en nada lo esperado, un "run-time error"

"compile error" errores de sintaxis o no establecidos en el programa.
"run-time error" errores de logica.

1.8 Algoritmos


Los algoritmos son las instrucciones logicas y matematicas que uno le da al programa para que haga su funcion predeterminada.

Para esto es recomendable primero entender el programa, ver de que se trata el problema e ir luego trabajandolo de arriba-abajo.

Cuando se entienda el problema se escribe un pseudocodigo, esto significa escribir los pasos mas importantes para ejecucion del programa, y luego trabajar en sus detalles con mas calma.

Esto es tambien llamado trabajar de arriba-abajo, de las metas a los detalles.

Como sabemos cuantas personas saben manejar?

Buscando todas las personas que sepan manejar. duh.
Pero para eso uno tiene que buscar la poblacion entera e ir preguntando.

Y ejemplos asi que uno con el tiempo entendera.

vease, Interpretacion de la clase de programacion metodologica 01.

http://tecnolecciones.blogspot.com/2013/07/interpretacion-de-la-clase-de.html