viernes, 30 de diciembre de 2011

Patron de diseño: MVC en Java


El tema principal es, aprender a usar uno de los tantos patrones de diseño que existen para el desarrollo de software pero, en Java. Primero veamos un poco de teoría para ir entendiendo de que va esto.

MVC 
MVC viene de las siglas Modelo Vista Controlador. Es un patrón de diseño de software. Aquí se nos presenta el termino "patrón".
Demos una definición simple:  
Un patrón es la abstracción de una forma concreta que puede repetirse en contextos específicos.
Simple, ¿Verdad? Expliquemos lo en cristiano...
 En el desarrollo de software un patron es una forma, un metodo, una manera, un procedimiento. ¿De que? Pues de realizar las cosas, de llevar a cabo el objetivo, de finalizarlo pero, todo esto segun las caracteristicas de los objetivos de la aplicacion, de alli lo de contexto. Y todo el proceso puede repetirse, por eso el termino "patron".

¿Para que?
Cuando desarrollamos software empezamos a escribir código tal cual como las patadas del ahogado. Osea solo nos importa que el problema (el objetivo del programa) se resuelva. Después, cuando tenemos que hacer otro programa iniciamos desde cero y lo normal es que se repita lo de las patadas de ahogado. Incluso, en nuevos programas es posible que tengamos que escribir código que en aplicaciones anteriores ya habíamos realizado.

Aqui es donde intervienen los patrones de diseño. Un patron de diseño nos ayuda a realizar nuestras aplicaciones de manera que se nos faciliten cosas como: 
  • Facilitan  la comunicacion interna
  • Ahorran tiempo y experimentos inutiles
  • Mejoran la calidad del diseño y la implementacion
Ademas de que actuan como "normas" o "buenas practicas de programacion".
Existen varios tipos de patrones, en este caso hablaremos sobre el patron de diseño MVC.

Como habia mencionado antes MVC es Modelo, Vista y Controlador.
Este patron de diseño nos dice que debemos separar nuestro programa en tres partes. Las cuales son las anteriores y nos indican lo siguiente.

Modelo: Es la parte logica del programa, el que resuelve el problema, el que da el resultado. Aqui van los algoritmos y la parte logica, la crucial.
Controlador: Es la seccion que se comunica con el modelo y la vista, obtiene los datos ingresados por el usuario a traves de la vista y lo manda al modelo para que este realice las operaciones correspondientes.
Vista: Esta parte es la que interactua con el usuario y envia los datos al controlador para que se realice la comunicacion con el modelo.

Podriamos decir que el modelo es la parte donde mas vamos a tardar pues es donde debemos resolver el problema. El controlador va muy ligado a la vista y estas dos partes son lo mas facil de realizar, relativamente.

Ahora que ya sabemos que debe hacer cada parte pongamos un ejemplo de algun programa que nos hayan pedido. Digamos que nos encargan realizar un programa que convierta una cantidad a pesos(MXN) y a Dolares(USD).

Realizamos un analisis del problema y ya sabemos como obtener el resultado.
Sabemos que un dolar vale 13,943 pesos y que un peso vale 0.072 dolares.
Entonces las operaciones para realizar la conversion serian: 
moneda * cantidad

Entonces ya tenemos como resolver el problema principal, ahora podemos empezar a escribir codigo.
Lo primero es el modelo. Crearemos un paquete que se llame mvc. En el que iran tres clases.
Modelo.java, Vista.java y Controlador.java.

Coloquemos el codigo de el Modelo:
package mvc;

public class Modelo {
 
 private Double moneda;
 private Double cantidad;
 private Double resultado;
 
 public void setMoneda(Double moneda) {
  this.moneda = moneda;
 }
 public void setCantidad(Double cantidad) {
  this.cantidad = cantidad; 
 }
 public Double getResultado() {
  return resultado;
 }
 public void convetirDolarAPeso() {
  resultado = cantidad * moneda;
 }
 public void convertirPesoADolar() {
  resultado = cantidad * moneda;
 }
}
Explicacion: 
La clase Modelo establece tres variables de clase o globales(atributos) y cinco metodos. Las variables son accedidas y modificadas por los metodos. Usamos los metodos set y get para modificar el valor de las variables cantidad y moneda. Y usamos los metodos que se encargan de realizar la conversion para obtener el resultado.

Ahora veamos el codigo de la Vista:
package mvc;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Vista extends JFrame{
 public JButton pesos, dolares;
 private JPanel panelB, panelR;
 public JLabel lResultado;
 public JTextField campoTexto;
 
 public Vista() {
  getContentPane().setLayout(new BorderLayout());
  
  panelB = new JPanel();
  panelB.setLayout(new FlowLayout());
  
  panelR = new JPanel();
  panelR.setLayout(new FlowLayout());
  
  pesos = new JButton("Convertir a Pesos");
  dolares = new JButton("Convertir a Dolares");
  
  lResultado = new JLabel("Resultado:");  
  campoTexto = new JTextField(20);
  
  panelB.add(pesos);
  panelB.add(dolares);
  
  panelR.add(lResultado);
  
  add(campoTexto, BorderLayout.NORTH);
  add(panelB, BorderLayout.SOUTH);
  add(panelR, BorderLayout.CENTER);
 }
}
Explicacion:
La clase vista se encarga de crear los componentes Swing que haran la GUI y no explico mas de UI porque eso es tema aparte =P
Basta con saber que hereda el componente JFrame, que contiene dos paneles, dos botones, un label y un textfield.

La clase Controlador:
package mvc;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

public class Controlador implements ActionListener {
 private Modelo modelo;
 private Vista vista;
 private Double cantidad;
 
 public Controlador(Modelo modelo, Vista vista) {
  this.modelo = modelo;
  this.vista = vista;
  
  this.vista.pesos.addActionListener(this);
  this.vista.dolares.addActionListener(this);
 }
 public void iniciarVista() {
  vista.setTitle("Conversor");
  vista.pack();
  vista.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  vista.setLocationRelativeTo(null);
  vista.setVisible(true);  
 }
 public void actionPerformed(ActionEvent evento) {
  if(vista.pesos == evento.getSource()) {
   if(!"".equals(vista.campoTexto.getText())) {
    try{
     cantidad = Double.parseDouble(vista.campoTexto.getText());
     modelo.setCantidad(cantidad);
     modelo.setMoneda(13.943);
     modelo.convetirDolarAPeso();
     vista.lResultado.setText(modelo.getResultado().toString());
    }catch(NumberFormatException e) {
     vista.lResultado.setText("Introduzca una cantidad valida...");
    }
   }
  }
  else if(vista.dolares == evento.getSource()) {
   if(!"".equals(vista.campoTexto.getText())) {
    try{
     cantidad = Double.parseDouble(vista.campoTexto.getText());
     modelo.setCantidad(cantidad);
     modelo.setMoneda(0.072);
     modelo.convertirPesoADolar();
     vista.lResultado.setText(modelo.getResultado().toString());
    }catch(NumberFormatException e) {
     vista.lResultado.setText("Introduzca una cantidad valida...");
    }
   }
  }
 }
}
Explicacion:
La clase Controlador se divide en tres partes importantes, la primera es la declaracion de los atributos de clase y el constructor de la clase. Esta parte crea atributos tipo Modelo y tipo Vista para poder controlar la aplicacion completamente. Ademas le agrega los escuchadores a los botones.

La segunda parte es el metodo iniciarVista(), el cual utilizando la variable vista accede a los componentes Swing correspondientes y realiza las configuraciones para mostrar la ventana(aplicacion).

La tercera parte tiene que ver con los componentes visuales, en este caso los botones que son los que nos dan las ordenes de accion, como la clase implementa la interface ActionListener sobreescribimos el metodo actionPerformed y comprobamos que boton fue clickeado.

Cuando se trata de el boton pesos, sabemos que la cantidad que se encuentra en el campo de texto deben de ser dolares, por lo tanto el valor de la moneda seran 13.943 pesos. Realizamos un parser y usamos el objeto modelo para llamar a los metodos get y set del mismo. Despues realizamos la conversion y establecemos en el label el resultado.

Cuando se trata de el boton dolares el procedimiento es el mismo, solo que esta ves la cantidad se supone esta en pesos, y un peso tiene un valor de 0.072 dolares.

Por ultimo creamos una clase en cualquier paquete que queramos y esta ejecutara nuestra aplicacion.
Por ejemplo:
package ejecutarConversor;

import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import mvc.Controlador;
import mvc.Modelo;
import mvc.Vista;

public class PruebaConversor {
 public static void main(String arf[]) {
  try {
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  } 
  catch (UnsupportedLookAndFeelException e) {
  }
  catch (ClassNotFoundException e) {
  }
  catch (InstantiationException e) {
  }
  catch (IllegalAccessException e) {
  } 
  Modelo modelo = new Modelo();
  Vista vista = new Vista();
  Controlador controlador = new Controlador(modelo, vista);
  controlador.iniciarVista();
 }
}

Esta clase crea tres objetos que son, del tipo Modelo, del tipo Vista y del tipo Controlador. A este ultimo le pasamos como parametro los otros dos. Por ultimo, por medio del objeto controlador mandamos mostrar la ventana. El bloque try-catch es solo para la skin o look and feel de la aplicacion.

Por ultimo unas screens de la ejecucion.





















Aqui termina la entrada de el patron de diseño MVC, espero que les sirva y que le hayan entendido.

sábado, 26 de noviembre de 2011

Instalar VirtualBox en Fedora 16

Para instalar VirtualBox en Fedora 16 se sigue el mismo patron que en las versiones anteriores.
Actualizar
Primero obtenemos los paquetes de el Kernel para poder instarlo pero antes debemos actualizar el sistema.
$ su -c 'yum update'
Ahora podemos descargar los paquetes. NOTA: Si se actualizo el Kernel, debes de reiniciar.
$ su -c 'yum install binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel dkms'
Si usas un Kernel PAE
$ su - 'yum install binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-PAE-devel dkms'
Repositorio
$ cd /etc/yum.repos.d/
$ su -c 'wget http://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo'
Instalar
$ su -c 'yum install VirtualBox-4.1'
Creando grupo
Creamos el usuario de VirtualBox y lo hacemos miembro del grupo vboxusers Pero antes debemos reconstruir los modulos del Kernel.
$ su -c '/etc/init.d/vboxdrv setup'
$ echo "O podemos usar este otro"
$ su -c 'service vboxdrv setup'
Agregando usuario
$ su -c 'usermod -a -G vboxusers nombre_de_tu_usuario'
Ahora iniciamos VirtualBox 
Para probarlo no hay como hacerlo desde la misma consola.
$ VirtualBox

viernes, 25 de noviembre de 2011

Tutorial: Conversión de videos con ffmpeg

En esta entrada veremos un tutorial, de como usar la aplicación ffmpeg para realizar conversiones. especialmente a *.flv.

Ffmpeg, es open source, y es un programa que se ejecuta desde la terminal.
Las características de la aplicación hace que pueda ser usado desde un nivel de principiante ( yo y muchos otros :D) hasta un nivel experto dando lugar a conversiones con parámetros complejos, lo que la hace muy buena opción para estos dos tipos de usuarios.
Hay que mencionar que por mi baja velocidad de Internet, decidí agregar otro parámetro al video quedando al final asi:
$ ffmpeg -i entrada.ogv -s 800x600 -sameq salida.flv
El nuevo parámetro hace que el tamaño de el video se cambie a 800 pixeles por 600 pixeles. Pero creo que se alcanza a apreciar de manera correcta.

Que hacer después de instalar Fedora 16 KDE

Se que ya tiene su tiempo de haber salido la versión 16 de Fedora pero nunca es tarde para mencionar algunas de las aplicaciones que podemos usar.

Actualizar el sistema

Nos logueamos como root:
[usuario@dominio directorio_actual]$ su
Contraseña: 
[root@dominio directorio_actual]#
Despues:
[root@dominio directorio_actual]# yum update
Cuando finalice la actualización ahora si estamos listos para lo siguiente.
Repositorios:
Libres y no libres
[root@dominio directorio_actual]# rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
[root@dominio directorio_actual]# rpm -ivh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
Codecs de audio y video 
Este paso es muy simple y rápido. KDE por defecto usa el motor multimedia de Gstreamer. Pero se ha comprobado que el de VLC es mas optimo y con mas calidad. Entonces el primer paso es descargar  e instalar el backend de vlc.
[root@dominio directorio_actual]# yum install phonon-backend-vlc
Y desinstalamos el bakend de Gstreamer
[root@dominio directorio_actual]# yum erase phonon-backend-gstreamer
Por ultimo solo reiniciamos.
[root@dominio directorio_actual]# reboot
Aplicaciones
 WEB
Seguramente no usas Konqueror para navegar en la web, si es asi, seguramente querras usar otro navegador. En lo personal el que mas me agrada es Firefox, sobre todo por sus addons.
[root@dominio directorio_actual]# yum install firefox
Flash player
32 bits:
[root@dominio directorio_actual]# rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm
[root@dominio directorio_actual]# rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux
64 bits:
[root@dominio directorio_actual]# rpm rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-x86_64-1.0-1.noarch.rpm
[root@dominio directorio_actual]# rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux
Instalándolo
[root@dominio directorio_actual]# yum install flash-plugin
Video y audio
Ya que usamos a VLC como backend de phonon seguramente tambien para reproducir casi cualquier formato, ya sea video o audio.
[root@dominio directorio_actual]# yum install vlc
KDE cuenta ya con Amarok y con Juk, dos reproductores de audio muy buenos, por no decir excelentes, sobre todo por parte de Amarok (mi preferido :D). Ademas también cuenta con Dragon Player.
Tambien podemos instalar Kaffeine, por si lo extrañas.
Este viene en los repositorios de livna.
[root@dominio directorio_actual]# rpm -ivh http://rpm.livna.org/livna-release.rpm
Ahora a descargarlo e instalarlo
[root@dominio directorio_actual]# yum install kaffeine
Imágenes y edición
De ves en cuando dan ganas de andar derrochando talento. Para eso tenemos varias opciones.
Visor de Comics: Comix ( mi preferido :3)
[root@dominio directorio_actual]# yum install comix
Editor de imágenes y retoque fotográfico, para eso no hay como mi queridisimo The Gimp.
[root@dominio directorio_actual]# yum install gimp
Cada ves que viene santa se me antoja hacer un logotipo, y en esos escasos dias uso Inkscape, para el diseño de imagenes vectoriales.
[root@dominio directorio_actual]# yum install inkscape
Offimatica
Aunque KDE ya cuente con su propia suite, estoy mas acostumbrado a usar LibreOffice. Hay varias formas de instalarlo.
Puedes acceder a la pagina oficial de LibreOffice y descargar el rpm. O instalarlo desde la terminal :p
Puedes escojer las aplicaciones que quieres tener instaladas de LibreOffice, por ejemplo:
Si yo quisiera tener solo el procesador de texto y el de presentación:
[root@dominio directorio_actual]# yum install libreoffice-writer libreoffice-impress libreoffice-langpack-es
Siempre estando seguros de que tenemos el paquete de lenguaje en español.
Ahora que si quieres instalar toda la suit de LibreOffice:
[root@dominio directorio_actual]# yum install libreoffice
Entornos de desarrollo
Seguro que eres aficionado a la programacion o experto o solo te gusta, para eso tenemos dos de las mejores opciones.
Eclipse
[root@dominio directorio_actual]# yum install eclipse
NetBeans
[root@dominio directorio_actual]# yum install netbeans
Kate
Aclaro que Kate no es un IDE es un editor de texto avanzado, cuenta con una consola integrada, muy bueno para ir practicando en algún lenguaje que vayas iniciando.
Al instalar eclipse o NetBeans, el open jdk se instalara por defecto.
[root@dominio directorio_actual]# yum install kate
Descarga y conversores
En estos tiempos dan ganas de andar conviertiendo videos y andar descargando archivos en masa, para eso:
Transmageddon
Dependencias:
[root@dominio directorio_actual]# yum install ffmpeg
[root@dominio directorio_actual]# yum install mencoder
Ahora solo descargamos el rpm de Transmaggedon, ya que no viene en los repos. Para eso podemos ir antes a la seccion de Utilerias. Y hacer un:
[root@dominio directorio_actual]# wget http://www.linuxrising.org/transmageddon/files/rpms/transmageddon-0.5-2.noarch.rpm
El cual podemos instalar con Apper Installer dandole un clic derecho al archivo o desde la terminal:
[root@dominio directorio_actual]# yum --nogpgcheck localinstall /ruta/del/archivo.rpm
JDownloader
Quien no adora este gestor de descargas :)
Para instalarlo basta descargar un .sh (script) desde la web oficial, pero primero nos posicionamos en la carpeta personal (home) de nuestro usuario
Debes salir de root
[root@dominio directorio_actual]# exit
[usuario@dominio directorio_actual]# cd /home/usuario/
Después descargar el script
[usuario@dominio directorio_actual]# wget http://212.117.163.148/jd.sh
[usuario@dominio directorio_actual]# echo "Darle permisos de ejecución a jd.sh"
[usuario@dominio directorio_actual]# chmod u+x jd.sh
[usuario@dominio directorio_actual]# echo "Ejecutar el script"
[usuario@dominio directorio_actual]# start jd.sh
Y seguir los pasos de la instalación (aceptar, siguiente, siguiente, etc). Para cuando lo cierren y lo quieran volver a iniciar pueden volver a ejecutar el jd.sh o el jar.
Utilerias
[root@dominio directorio_actual]# yum install unrar wine p7zip p7zip-plugins wget
Esto seria todo, muy pronto el tuneado de KDE :)

domingo, 13 de noviembre de 2011

Usando Record My Desktop

Record My Desktop es una herramienta para realizar grabaciones de escritorio, ahora popularmente conocidos como Screencast.
Es Software Libre, GPL, por supuesto. Esta escrito en C y en Python.
Les dejo un link al proyecto en sourceforge.net link por si les interesa.

Que sepan que en la pagina oficial existen tanto la documentación como un manual de introducción. Yo simplemente tomare algunas cosas de ellos y agregare otras miás. Si les interesa saber mas:
Documentación y Guiá de usuario, las dos en ingles.
Siguiendo con el tema, también seria bueno mencionar que aunque es una aplicación de consola hay aplicaciones con GUI.

Trabajando desde consola.
Para realizar la instalación, hay varias formas, desde el código fuente, un paquete especifico para tu distribución, rpm, deb, etc... O desde los repositorios.
Desde distro basada en debian:
apt-get install recordmydesktop
Desde distro basada en red hat:
yum install recordmydesktop

Las opciones para usarlo desde consola pueden ir desde simples hasta complejas. Como somos nuevos en esto, con abrir una terminal y:
















De esta forma se genera un archivo con un nombre default y extensión .ogv.
La seleccion sera toda la pantalla, para terminar la grabación un Ctrl + C.
Despues nos aparecera la siguiente pantalla:















En esta parte se nos menciona que si presionamos de nuevo Ctrl + C se terminara el proceso de codificación.
Trabajando en modo gráfico
Para usar el recordmydesktop con UI dependera del escritorio.
Para GTK:
gtk-recordmydesktop
Para KDE:
qt-recordmydesktop
Sencillo, no?
Por ejemplo, yo estoy en KDE así es que escojo la librería Qt.
Abro una terminal y tecleo:
apt-get/yum install qt-recordmydesktop
Después de la instalación solo queda buscar la aplicación en nuestro menú.
En KDE,  Aplicaciones > Multimedia > qt-recordMyDesktop
Al abrirlo observamos una ventana de este tipo:












Podemos observar las barras de calidad vídeo/sonido, dependiendo de nuestras necesidades las moveremos. En lo personal me gusta dejarlas al máximo, ya que al hacer las conversiones para subirlas a un servidor pierde calidad. Hay que tener en cuenta lo que queremos hacer y donde lo subiremos o como lo haremos(el formato).

Observamos también las opciones para seleccionar un área especifica o una ventana especifica.

Una ves que hayamos establecido nuestras opciones y terminemos de grabar iniciara el proceso de codificación, y aparecera una ventana de este tipo:
Una vez finalizada la codificación queda listo nuestro vídeo, lo normal es que sea en:
/home/usuario/

Hasta aquí termina la introducción a Record My Desktop
Si queremos aprender mas, tendremos que revisar la documentación y leer o grabarse la guia de usuario.
Algo que les puede ser útil es que desde una consola tecleen:
man recordmydesktop
 Les dejo un vídeo de ejemplo, incluye audio.
http://goo.gl/MGgF5
Mi voz no es la mas sensual y clara pero para fines prácticos y didácticos creo que vale. :D
Hasta la próxima.

sábado, 12 de noviembre de 2011

Bug Intel emachines e525

Bueno en esta entrada mencionare como es que logre resolver el bug que existe en el kernel 3.x.x-x de Linux y las tarjetas de video intel con nucleo i915.
Específicamente, mi tarjeta de video es una Mobile Intel GM45 Express Chipset.
Actualmente estoy en un kernel 3.1.0-7 y aun no hay un fix oficial. Asi es que a meterle mano.
La solución que me funciono a mi, la descubrí navegando en los foros de arch y de ubuntu. Y resulta que la persona que daba la solución era la misma: Unknown47.
Así es que vamos a la solución.


Distro instalada:
Si estas usando un sistema ya instalado y que en la actualizacion quedo dañado entonces cuando estes en la pantalla de booteo (grub) debes editarla, en Fedora, es con "e" de edit.
Aparecerá un editor de texto por consola, en esta parte buscamos el final de la linea del kernel y agregamos:

acpi_osi=Linux

quedando un final de linea algo asi:
...LANG=en_US.UTF-8 acpi_osi=Linux


Mientras carga el sistema podemos usar la combinación de teclas para incrementar el brillo de la pantalla. Les comento que en mi laptop la combinación estaba invertida y de no haberme equivocado al hacerla no estuviera escribiendo esta entrada, y menos desde mi lap...

Después de eso, ya deberías iniciar correctamente tu sistema GNU/Linux

Desde Live CD/DVD
El procedimiento es casi el mismo, en la pantalla de inicio de tu distro, debes buscar la opción de editar la linea del kernel, en Fedora, creo que es utilizar tabulador para editar la linea.
Al final de la misma solo que hay que agregar la misma linea de arriba: 

acpi_osi=Linux

Luego de eso, solo queda subir el brillo de la pantalla y prepararse para la instalación :D


Lamentablemente desconozco el archivo de configuración donde podamos colocar estas lineas y evitar estar editando la linea del kernel cada vez que iniciemos el sistema, se los quedo a deber.
Gracias a Unkown47 donde quiera que estés  bro! :D

Introducción a la programación: Lenguaje de programación

En vista de que pienso ir creando varias entradas relacionadas con la programación buena idea es ir dando conceptos e información sobre los temas a tratar.
En este caso, hablaremos sobre algunos de los conceptos de programación.
Iniciemos entonces con la frase clave:  


Lenguaje de programación.
Un lenguaje de programación es un idioma artificial, que se comunica o controla con un o unos dispositivos digitales (ejemplo: pc), creado para desarrollar aplicaciones lógicas  que controlen física  o lógicamente al dispositivo. Usan reglas gramaticales para su escritura, mejor conocidas como reglas sintácticas (sintaxis) y semánticas (sentido o significado), las cuales declaran la estructura de un programa dado.

Además de esta definición también seria bueno explicar que es programar, programar es escribir programas, sencillo,¿Verdad?... Esto es codificar(escribir) en un lenguaje de programacion una serie de instrucciones que tengan como fin un o unos objetivos específicos.
Ejemplo: 
  • Desarrollar un programa que realice las tablas de multiplicar.
  • Escribir un programa que me permita visitar paginas web(un navegador web). 
  • Diseñar una aplicación que reproduzca archivos de video y audio.
Todos estos son ejemplos de programas(aplicaciones).
Noten que use "desarrollar", "escribir", "diseñar". Refiriéndome claramente a la misma acción, programar.

No esta de mas decir que un programador es una persona que escribe programas.

Tipos de lenguajes
En la programación existen niveles de abstracción con la comunicación entre programador y maquina. Estos niveles se clasifican de la siguiente manera:


El contenido de aquí hasta donde se indique ah sido obtenido y modificado de Wikipedia.
Lenguaje Máquina - Las invocaciones a memoria, como los procesos aritmético lógicos son posiciones literales de conmutadores físicos del hardware en su representación booleana. Estos lenguajes son literales de tareas.


       En español significa que la comunicación hombre-maquina esta reducida a su mínima expresión, esto es, las ordenes o instrucciones están dadas por código binario(0 y 1).


Lenguajes de bajo nivel - Son instrucciones que ensamblan los grupos de conmutadores necesarios para expresar una mínima lógica aritmética. Están íntimamente vinculados al hardware. Por norma general están disponibles a nivel firmware, cmos o chip set. Estos lenguajes están orientados a procesos. Los procesos se componen de tareas. Contienen tantas instrucciones como la arquitectura del hardware así haya sido diseñada.
  • Por ejemplo: La arquitectura CISC contiene muchas mas instrucciones a este nivel, que la RISC.
  • Son denominados como ensambladores de un hardware concreto.
Esto quiere decir que la conversión de lenguaje ensamblador a código maquina es casi inmediata, las instrucciones y operaciones disponibles están dadas por el tipo de dispositivo sobre el que se va a programar. Como otros ejemplos de lenguajes ensambladores tenemos el MASM para Windows y  GCC en GNU/Linux.

Lenguajes de medio nivel - Son aquellos que, basándose en los juegos de instrucciones disponibles (chip set), permiten el uso de funciones a nivel aritmético, pero a nivel lógico dependen de literales en ensamblador. Estos lenguajes están orientados a procedimientos. Los procedimientos se componen de procesos.
  • Ejemplos: C, Basic.
Como explicación podemos decir que son lenguajes intermedios, osea pueden ejecutar instrucciones de ensamblador y tener comunicación directa con los dispositivos y también permiten instrucciones de tipo alto nivel.


Lenguajes de alto nivel - Son aquellos que permiten una máxima flexibilidad al programador a la hora de abstraerse o de ser literal. Permiten un camino bidireccional entre el lenguaje máquina y una expresión casi oral entre la escritura del programa y su posterior compilación. Estos lenguajes están orientados a objetos. Los objetos se componen de propiedades cuya naturaleza emerge de procedimientos.
  • Ejemplos: C++, Fortran, Cobol, Lisp.
En definitiva, este tipo de lenguajes contienen expresiones mas humanas y amenas, dando la oportunidad al programador de desarrollar aplicaciones mas robustas. Pero tambien mencionar que no todos los lenguajes de alto nivel tienen como paradigma la programacion orientada a objetos, al menos no de manera principal.


Lenguajes de aplicaciones - Son aquellos que no permiten una bidireccionalidad conceptual entre el lenguaje máquina y los lenguajes de alto nivel, ni tampoco la literalidad a la hora de invocar conceptos lógicos. Se basan en librerías creadas en lenguajes de alto nivel. Pueden permitir la creación de nuevas librerías, pero son propietarias y dependientes de las suministradas por la aplicación. Estos lenguajes están orientados a eventos. Los eventos acontecen cuando las propiedades de un objeto interactúan con otro.
  • Ejemplos: En Windows Visual Basic ,GNU/Linux Gambas.
Este tipo de lenguajes facilitan la creación de programas, y están pensados para ser usados en User Interface(UI, Interfaz de usuario). Pero dejan a escondidas la mayoría de las instrucciones. Conocidos también como RAD (rapid application development, Desarrollo Rápido de Aplicaciones).
 

Lenguajes de redes - Son aquellos que se basan en un convenio de instrucciones totalmente independientes de la máquina, y completamente dependientes de la red a la que están orientadas. Se dividen en descriptivos (HTML, XML, VML), de cliente-Servidor (Java, PHP) y de script (Python, Ruby).
Específicamente hablando los descriptivos no son lenguajes de programacion, son solo etiquetas que diseñan la estructura de un documento. Mientras que los que son llamados scripting y Cliente-Servidor si son lenguajes de programacion y algunos de ellos no solo se limitan a funcionar sobre la red en la que indica la explicación, como ejemplo tenemos a Java, que es mencionado del tipo Cliente - Servidor, sin embargo es de propósito general y bien puede ser usado para la creación de GUI (Graphics User Interface, Interfaz Gráfica de Usuario).
Hasta aquí termina el tema de los Lenguajes de programación. Ha faltado mucho, mucho mas, pero esto no es un curso o titulación.
De ahora en adelante es parte de ustedes que aprendan mas.
Nos vemos en la próxima entrega.


Obtenido de Wikipedia y modificado:
Link
Siendo así que el contenido de la publicación contiene la licencia Creative Commons Atribución/Compartir-Igual 3.0
Bajo los siguientes términos: términos.