jueves, 27 de enero de 2011

PROYECTO: Diseño de clases

Taller de Lenguajes de Programación - Semana 2 - Reporte 2


Que tal compañeros!!!

Esta vez les mostrare el esqueleto de mi proyecto, aún le falta pulir y perfeccionar bastante:

CLASE Facturacion

Como ya lo mencione, esta sera la clase padre de todo, quien se encargara de generar la ventana, redibujarla en cada acción, importar las facturas a otros formatos, etcétera
package Facturar;

import javax.swing.*;
import java.awt.*;

public class Facturacion extends JFrame {

    private Factura f;

    JButton Boton = new JButton();
    JPanel Herramientas = new JPanel();
    
    public void buscar () {
 return;
    }

    public void imprimir() {
 return;
    }

}

CLASE Factura

Es la encargada de generar las facturas y los datos que irán dentro de la misma, aún no defino algunos métodos para esta clase.
package Facturar;

public class Factura {

    private Cliente c;
    private Pedido i;
    private Proveedor p;

}

CLASES Cliente, Proveedor, Pedido

Estas clases tienen como atributos los datos fiscales de las 2 personas que intervienen en la compra-venta de los servicios y productos. La clase pedido tiene como atributos los datos de cada artículo a registrar.
package Facturar;

public class Proveedor {
    
    private String nombre;
    private String direccion;
    private String rfc;

}



package Facturar;

public class Cliente {

    private String nombre;
    private String direccion;
    private String rfc;

}



package Facturar;

public class Pedido {

    private String codigo;
    private String articulo;
    private int cantidad;
    
}

CLASE Comunicacion

El nombre de esta clase esta en debate. Su función es la de realizar el intercambio de informacón entre todas las partes del programa, intercambiando información entre las bases de datos y la aplicación
package Facturar;

import java.io.*;
import java.util.StringTokenizer;

public class Comunicacion {

    BufferedReader input = new BufferedReader(newFileReader(archivo));

    public void buscar() {
 return;
    }

    public void guardar() {
 return;
    }
    
    public void modificar() {
 return;
    }

    public void eliminar() {
 return;
    }

}


Bueno, estas son las clases muy austeramente creadas de mi proyecto. :)

SALUDOS

martes, 25 de enero de 2011

PROYECTO: Definición de Clases

Programacion Orientada a Objetos - Semana 2 - Reporte 2

Para esta entrada trataré de explicar para que servirán algunas de las clases de mi código, las que mostraré aqui son las mas evidentes y conforme el código vaya creciendo se iran agregando mas clases.

Teniendo como ejemplo nuevamente la imagen de mi entrada anterior enlistare las clases que son identificables:



Clase Facturación:



Esta clase yo la visualizo como la principal, uno de sus objetivos es dibujar la ventana en la cual se llevaran acabo todas las acciones del programa, por consiguiente algunos de sus atributos seran efectivamente el tamano de la ventana, su forma, etc. Otro de sus objetivos será redireccionar todas las acciones generales del programa mediante botones porque una de mis intenciones es colocar una barra de herramientas que permita llamar a diferentes comandos directamente tales como abrir la base de datos, imprimir o modificar una factura, buscar, etcétera.

Clase Factura



La misma factura sera una clase, ya que tendrá diferentes atributos como el número de serie, el sello digital, datos del cliente y del vendedor y los artículos o servicios que se estan facturando. Puede crear un cliente, un proveedor y un pedido. Algunos de sus métodos serán ir armando la factura con los datos que se vayan pidiendo, importar la misma a otros formatos como PDF o formato electrónico (XML), imprimir o simplemente mostrar en pantalla la factura.

Clase Cliente


Esta clase como su nombre lo dice tendrá como atributos todos los datos personales y fiscales del cliente: nombre, dirección, RFC, etcétera.
Sus funciones realmente no son muchas y su funcionalidad depende mucho de la clase comunicación ya que esta clase envía sus datos a la clase comunicación quien después los manipula de diferentes formas.

Clase Proveedor


Será parecida a la clase cliente ya que almacenara todos los datos personales y fiscales del proveedor: nombre, dirección, RFC, etcétera.

Clase Pedido


Como su nombre indica, esta clase contendrá los datos necesarios para generar un producto: artículos, cantidad, precio, número de producto, etcétera. Como en la clase cliente esta necesita estar conectada a la clase comunicación quien es la que manipula los datos de diferentes maneras.

Clase Comunicación


Es posiblemente otra de las más importantes, tiene como atributos algunas variables que guardarán los datos enviados por las otras clases. Su función será la de apertura y cierre de archivos; lectura, escritura, borrado o modificación de las bases de datos. Como ya se habrán dado cuenta su función es ser intermediario entre el proceso de entrada y salida pues las clases Pedido o Cliente piden y generan datos y después esta clase los guarda, o también,mediante una petición previa, extrae datos de la base y después los reedirige ya sea a la clase Cliente o la clase Pedido.

Espero y tengan una perspectiva más amplia de mi proyecto :)

Referencias:
http://elvex.ugr.es/decsai/java/pdf/3B-Clases.pdf

domingo, 23 de enero de 2011

PROYECTO: Herramientas

Taller de Programación Orientada a Objetos - Semana 1 - Reporte 1

Hola a todos !!

En esta entrada vamos a repasar las herramientas que vimos en clase y que nos serán útiles para nuestros proyectos.

LENGUAJES


Python


Este es un poderoso lenguaje de programación, se trata de un lenguaje multiparadigma y de alto nivel. Es muy fácil de aprender ya que su sintaxis es muy sencilla y ligera lo cual le otorga muchos puntos a favor.
Otra de las características es que cuenta con un soporte bastante completo en la web y librerías que facilitan el desarrollo de aplicaciones.
Es muy utilizado en las interfaces CGI.

Cómo empezar


Realmente no hay que empezar, Python viene completamente cargado en Ubuntu, para verificar su existencia basta con entrar a la Terminal y teclear:

which python

Lo que resultara en una ventana como la siguiente:


Esa línea que se nos es mostrada (que por lo general es /usr/bin/python) es lo que se conoce como interprete, esa línea hay que incluirla en cada uno de los códigos que escribamos en este lenguaje, por ejemplo:
 #!/usr/bin/python
print "\t\tOBTENER EL PORCENTAJE DE UN TOTAL\n"
x = float(input("Dame el valor total ->  "))
y = float(input("Porcentaje  obtener ->  "))
porcentaje = x*y/100
print "El resultado es -> "
print porcentaje

El script es un ejemplo muy austero de cómo obtener un porcentaje.

ESTA ES UNA ENTRADA ANTERIOR DONDE EXPLICO MUY A FONDO LAS CARACTERÍSTICAS DE PYTHON: Click aqui

C++


Es una extensión del lenguaje C, a través de la cual se le proporciona de programación orientada a objetos. Para los que hemos programado en C nos será relativamente fácil entender este lenguaje ya que la sintaxis es la misma a excepción por supuesto de aquellas funciones de la POO.

Cómo empezar


Depende de la versión de Ubuntu, la versión 10.04 incluía el compilador g++, pero, la versión 10.10 ya no lo incluye.

Para verificar su existencia basta con entrar a la terminal y teclear:

g++

Se nos pueden presentar 2 situaciones, si existe veremos algo asi:


Si no existe veremos algo asi:



Entonces será necesario instalarlo. Para ello teclearemos en la terminal:

sudo apt-get update

para obtener las listas actualizadas de los repositorios:


Despues teclearemos:

sudo apt-get install g++

y la instalacion comenzara. Cuando sea necesario presionamos Y


y dejamos que la instalación concluya. Después volveremos a teclear g++ para verificar que realmente se haya instalado con éxito:


EN ESTA ENTRADA PODRÁN VER UNA RESEÑA MUY COMPLETA HECHA POR MI SOBRE ÉSTE LENGUAJE: Click aqui!!

JAVA


Otro lenguaje muy completo y muy poderoso, utilizado muy ampliamente por desarrolladores de juegos y aplicaciones. Éste será el lenguaje que usaré para escribir mi proyecto.
Cuenta con muchos soportes técnicos (oficiales y no oficiales) muy completos en línea.

Cómo empezar


Para comenzar a utilizar Java necesitamos instalar el Java Development Kit (JDK), este incluye el compilador y el runtime para probar nuestras aplicaciones.
Para instalar esta herramienta teclearemos en la terminal:

sudo apt-get install openjdk-6-jdk

Verermos algo como esto:



Presionamos Y para aceptar la instalacion y esperamos a que ésta concluya.

Para verificar que se haya instalado con éxito tecleamos en la Terminal

javac

Lo que mostrara un texto parecido a ésto:


Tambien tecleamos

java

Con lo que veremos algo como esto:


Aquí pueden ver la documentación de JAVA 6: API

Herramientas


Diagramas UML


“ Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.

Es importante resaltar que UML es un "lenguaje de modelado" para especificar o para describir métodos o procesos. Se utiliza para definir un sistema, para detallar los artefactos en el sistema y para documentar y construir. En otras palabras, es el lenguaje en el que está descrito el modelo.”

Fuente: http://es.wikipedia.org/wiki/Lenguaje_Unificado_de_Modelado


Los diagramas UML son muy útiles ya que nos ayudan a diseñar nuestro sistema por medio de una iinterfaz muy intuitiva. Cada una de nuestras las parte de nuestro programa es representada por medio de un nodo de un diagrama de árbol, y cada parte la podemos interconectar con otras con las cuales es necesario entablar comunicación. Una vez ensamblado nuestro sistema es posible generar el código del mismo en diversos lenguajes.

Podemos instalar diversas herramientas para generar diagramas UML, dos de ellas son Bouml y Umbrello

Instalar UMBRELLO


1. Entrar al menú APPLICATIONS
2. Entrar al programa UBUNTU SOFTWARE CENTER
3. En la ventana de UBUNTU SOFTWARE CENTER, teclear en la caja de busqueda "UMBRELLO"
4. Dar click en "INSTALL"


INTERFAZ



Instalar BOUML


1. Entrar al menú APPLICATIONS
2. Entrar al programa UBUNTU SOFTWARE CENTER
3. En la ventana de UBUNTU SOFTWARE CENTER, teclear en la caja de busqueda "BOUML"
4. Dar click en "INSTALL"


INTERFAZ



Espero les sirvan estas herramientas, en la barra de la derecha en "RECURSOS" hallaran muchas mas herramientas.

SALUDOS :)

PROYECTO: Sistema de Facturación

Programación Orientada a Objetos - Semana 1 - Reporte 1

Que tal compañeros!

La idea de mi proyecto nació de una petición que se me hizo a finales del año pasado del que ahora considero mi cliente. Él es dueño de una empresa de transportación y su necesidad principal es tener un sistema completo de facturación para poder manipular toda su base de datos sin necesidad de depender de programas como Excel; además de necesitar un sistema que le permita crear facturas electrónicas ya que este método de facturación es obligatorio para todos los empresarios contribuyentes a partir de éste año

Entonces mi objetivo es desarrollar un sistema de facturación que además de facturar tenga algunos extras para facilitar el trabajo del cliente, recordemos que al desarrollar una aplicación hay que tomar en cuenta la optimización de tiempos y procesos, eso es algo que intentare lograr con mi sistema.



OBJETIVOS DEL PROYECTO


PROGRAMACIÓN


Para la programación utilizaré el lenguaje Java, ya que es el más adhoc a mis necesidades, una de las cosas que me hizo decidirme por este lenguaje es la existencia de librerías que ayudan a certificar y validar facturas electrónicas.

INTERFAZ


No es muy necesario contar con una interfaz, pero en la actualidad es un poco engorroso y poco atractivo manipular una aplicación desde una terminal.
Una interfaz minimalista que trabaje por medio de campos de texto para ingresar datos y botones para realizar diversas acciones

BASE DE DATOS


Crear una base de datos que permita automatizar el proceso de captura de datos.
La base de datos alojaría todos los datos necesarios de los clientes y vendedores. Serán posibles también acciones como dar de alta, dar de baja o modificar información de un cliente.
Esto me servirá también para automatizar el proceso de facturación: al introducir por ejemplo el nombre del cliente los campos con la información personal del mismo serán rellenados automáticamente.

FACTURACIÓN


El objetivo principal de mi sistema.
El programa facturara procesos y servicios, posteriormente estas facturas podrán ser impresas ya sea en papel, PDF, o electrónicamente (XML). Así mismo se podrán guardar en algún formato propio para manipularse posteriormente.

CREACIÓN DE CFD


Siglas de “Comprobante Fiscal Digital” posiblemente una de las etapas más complicadas del sistema, generar facturas electrónicas. Para poder generar un CFD necesito contar con una clave que el SAT proporciona a todos aquellos contribuyentes que facturen servicios y un certificado de seguridad, con estos datos el módulo o clase que programaré tendrá que cifrar y validar una firma digital para que el comprobante sea válido.


Ésta es la descripción de mi proyecto para el semestre, como tal vez pudieron notarlo estoy muy entusiasmado por lograr mi objetivo y pronto iré mostrando avances y también espero que dichos avances sean útiles para sus proyectos.

☺ ☻ ☺ ☻

domingo, 21 de noviembre de 2010

LENGUAJES ORIENTADOS A OBJETOS - Reporte 8

Lenguajes de Programación - Semana 14 - Reporte 8

C++


Este programa que hice en C++ genera un buen amigo que se preocupa por ti :), llamado "Fulanito", fulanito es un objeto, los objetos de su clase tienen lo que yo llame "memoria", la memoria se divide en tres atributos, un string que almacena tu nombre y 2 enteros que almacenan las 2 respuestas que des a las 2 preguntas que te hará nuestro amigo. A su vez se implementan 3 métodos, uno de presentación y los otros 2 son cuando fulanito te formula las 2 preguntas.
#include <iostream>
#include <string>
using namespace std;

class Amigo {
  string nombre;
  int pre1, pre2;
public:
  void presentacion();
  int pregunta1();
  void pregunta2();
};

void Amigo::presentacion() {
  cout << "\nHola, me llamo Fulanito :), Como te llamas?" << endl;
  getline(cin, nombre);
  cout << "\nHola " << nombre << ", mucho gusto!!" << endl;
  return;
}

int Amigo::pregunta1() {
  cout << "\nY como has estado" << endl;
  cout << "\n\t1. Bien :)\t\t2. Mal :(" << endl;
  cin >> pre1;
  if (pre1 == 1) {
    cout << "\nQue bueno, yo tambien estoy muy bien :)" << endl;
    return pre1;
  } else
    return pre1;
}

void Amigo::pregunta2 () {
  cout << ":( cuentame porque estas mal... " << endl;
  cout << "\n1. Estoy triste\t\t2. Estoy enfermo" << endl;
  cin >> pre2;
  if (pre2 == 1)
    cout << "No estes triste, hoy es un lindo dia, vamos a pasear :)" << endl;
  else if (pre2 == 2) 
    cout << "Bueno, deberias ir a ver al medico y descansar todo el dia :)" << endl;
  else
    return;
}

int main(int argc, char** args) {
  Amigo fulanito;
  int x;
  fulanito.presentacion();
  x = fulanito.pregunta1();
  if (x == 2) {
    fulanito.pregunta2();
  }
  return 0;
}

DESCARGA: amigo.cpp
Para compilar: g++ -o amigo amigo.cpp
Para ejecutar: ./amigo

EJECUCIÓN


Python


Para mi programa en Python decidí practicar la herencia múltiple, una caracteristica de la Programacion Orientada a Objetos de este lenguaje.
Declare muchas clases, cada una parecida pero diferente a las demás, y despues declare otras mas cuyo fin es heredar los atributos de las anteriores para asi generar un solo mensaje concatenado.
#!/usr/bin/python

class Mamifero:
    def tipo (self):
        print "Es mamifero, tiene pelo y es viviparo."

class Reptil:
    def tipo (self):
        print "Es reptil, tiene sangre fria y es oviparo."

class Ave:
    def tipo (self):
        print "Es un ave, tiene plumas y alas por lo que puede volar."

class Insecto:
    def tipo (self):
        print "En un insecto, come hojas, tiene antenas, tres pares de patas y exoesqueleto."

class Pez:
    def tipo(self):
        print "Es un pez, tiene escamas, es oviparo y respira por sus branquias."

class Acuatico:
    def desplazar (self):
        print "Como vive en el agua este animal nada y no se como duermen :p."

class Terrestre:
    def desplazar (self):
        print "Como vive en la tierra este animal camina sobre sus patas."

class Perro(Mamifero, Terrestre):
    def caracteristicas(self):
        print "\nEl perro come todo lo que le den y tiene 4 patas."

class Cocodrilo(Reptil, Terrestre):
    def caracteristicas(self):
        print "\nEl cocodrilo se come a otros animales y tiene 4 patas"

class Aguila(Ave):
    def caracteristicas(self):
        print "\nLas aguilas son carnivoras, cazan a sus presas."

class Hormiga(Insecto, Terrestre):
    def caracteristicas(self):
        print "\nLas hormigas cavan sus hogares bajo la tierra."

class Salmon(Pez, Acuatico):
    def caracteristicas(self):
        print "\nEl salmon es un pez espectacular, come otros peces mas pequenos que el y crustaceos, hacen el viaje mas impresionante del reino animal al regresar al lugar donde nacieron."

def main():
    print "\n1. Perro\t\t2. Cocodrilo"
    print "3. Aguila\t\t4. Hormiga"
    print "5. Salmon"
    x = input("Elige uno ->")
    if x == 1:
        obj = Perro()
        obj.caracteristicas()
        obj.desplazar()
        obj.tipo()
    elif x == 2:
        obj = Cocodrilo()
        obj.caracteristicas()
        obj.desplazar()
        obj.tipo()
    elif x == 3:
        obj = Aguila()
        obj.caracteristicas()
        obj.tipo()
    elif x == 4:
        obj = Hormiga()
        obj.caracteristicas()
        obj.desplazar()
        obj.tipo()
    elif x == 5:
        obj = Salmon()
        obj.caracteristicas()
        obj.desplazar()
        obj.tipo()
    else:
        print "\nOpcion no valida"

if __name__ == "__main__" :
    main()

DESCARGA: animales.py
Para modificar permisos: chmod u+x animales.py
Para interpretar: ./animales.py

EJECUCIÓN


Java


Por último en Java, decidí implementar una calculadora super sencilla, con varios errores porque no he implementado las condiciones para los números negativos, pero funciona con números positivos. Toda la visualizacion es dentro de una ventana generada con las librerias de Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculadora extends JFrame {

    JTextField pantalla;
    double resultado;
    String operacion;
    JPanel numeros, operaciones;
    boolean nuevaOperacion = true;

    public Calculadora() {
        super();
        setSize(200, 250);
        setTitle("Calculadora");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);

        JPanel panel = (JPanel) this.getContentPane();
        panel.setLayout(new BorderLayout());

        pantalla = new JTextField("0", 20);
        pantalla.setHorizontalAlignment(JTextField.RIGHT);
        pantalla.setEditable(false);
        pantalla.setBackground(Color.WHITE);
        panel.add("North", pantalla);

        numeros = new JPanel();
        numeros.setLayout(new GridLayout(4, 3));

        for (int n = 9; n >= 0; n--) {
            BotonNumero("" + n);
        }
        BotonNumero(".");

        panel.add("Center", numeros);

        operaciones = new JPanel();
        operaciones.setLayout(new GridLayout(6, 1));

        BotonOperacion("C");
        BotonOperacion("+");
        BotonOperacion("-");
        BotonOperacion("X");
        BotonOperacion("/");
        BotonOperacion("=");

        panel.add("East", operaciones);
    }

    private void BotonNumero(String digito) {
 JButton b = new JButton();
 b.setText(digito);
 b.addMouseListener(new MouseAdapter() {
  
  @Override
      public void mouseReleased(MouseEvent e) {
      JButton b = (JButton) e.getSource();
      numpresionado(b.getText());
  }
     });
 numeros.add(b); 
    }

    private void BotonOperacion(String operacion) {
        JButton b = new JButton(operacion);
        b.setForeground(Color.BLACK);
        b.addMouseListener(new MouseAdapter() {
      
  @Override
      public void mouseReleased(MouseEvent e) {
      JButton b = (JButton) e.getSource();
      operpresionado(b.getText());
  }
     }); 
        operaciones.add(b);
    }

    private void numpresionado(String digito) {
        if (pantalla.getText().equals("0") || nuevaOperacion) {
            pantalla.setText(digito);
        } else {
            pantalla.setText(pantalla.getText() + digito);
        }
        nuevaOperacion = false;
    }

    private void operpresionado(String tecla) {
        if (tecla.equals("=")) {
            calcular();
        } else if(tecla.equals("C")) {
            resultado = 0;
            pantalla.setText("");
            nuevaOperacion = true;
        } else {
            operacion = tecla;
            if((resultado > 0) && !nuevaOperacion) {
                calcular();
            } else {
                resultado = new Double(pantalla.getText());
            }
        }
        nuevaOperacion = true;
    }

    private void calcular() {
        if (operacion.equals("+")) {
            resultado += new Double(pantalla.getText());
        } else if (operacion.equals("-")) {
            resultado -= new Double(pantalla.getText());
        } else if (operacion.equals("/")) {
            resultado /= new Double(pantalla.getText());
        } else if (operacion.equals("X")) {
            resultado *= new Double(pantalla.getText());
        }
        pantalla.setText("" + resultado);
        operacion = "";
    }

    public static void main(String[] args) {
        Calculadora c = new Calculadora();
        c.setVisible(true);
    }
}

DESCARGA: Calculadora.java
Para compilar: javac Calculadora.java
Para ejecutar: java Calculadora

EJECUCIÓN

lunes, 15 de noviembre de 2010

LENGUAJES ORIENTADOS A OBJETOS - Python

Laboratorio de Lenguajes de Programación - Semana 9

Siempre hago mucho hincapie en las características de este hermoso lenguaje, la verdad es que desde que lo utilice por primera vez me enamore :p, pues es muy sencillo de usar y de aprender asi que realmente los invito a utilizarlo

Esta es una corta entrada hecha por mi sobre Python y la Web

INTÉRPRETE


Recordemos que los códigos escritos en Python no son compilados sino interpretados, y Ubuntu incluye dicho intérprete.
Solo basta con teclear en la terminal: which python
para comprobar y verificar la ubicación donde esta disponible.


Por lo general el intérprete se encuentra en la carpeta /usr/bin/python.

La extensión de los códigos fuente es *.py.

Para interpretar un script en Ubuntu primero hay que otorgarle permisos de ejecución, esto se hace con el comando chmod.

Por ejemplo: chmod u+x archivo.py

VARIABLES Y TIPOS



Python maneja 3 tipos de variables:

Números que pueden ser enteros (int), coma flotante (float) o complejos (complex)
Cadenas de texto que son simples caractéres (char)
Booleanos o lógicos, que devuelven dos estados "TRUE" o "FALSE".

Python es un lenguaje de tipado dinámico se refiere a que no es necesario declarar el tipo de dato que va a contener una determinada variable, sino que su tipo se determinará en tiempo de ejecución según el tipo del valor al que se asigne, y el tipo de esta variable puede cambiar si se le asigna un valor de otro tipo, claro, siempre y cuando se haga un typecasting.

Yo puedo hacer esto:

c = 90
x = 12.36
a = "Hola a todos"

Todas las anteriores son declaraciones de variables, no necesito en realidad decirle a Python de que tipo son (int, float o char), el intérprete me lo detectará automáticamente

Operadores




Operadores a nivel bit


El operador and (&), del inglés “y”, devuelve 1 si el primer bit operando es 1 y el segundo bit operando es 1. Se devuelve 0 en caso contrario.

El operador or (|), del inglés “o”, devuelve 1 si el primer operando es 1 o el segundo operando es 1. Para el resto de casos se devuelve 0.

El operador xor u or exclusivo (^) devuelve 1 si uno de los operandos es 1 y el otro no lo es.

El operador not (~), del inglés “no”, sirve para negar uno a uno cada bit; es decir, si el operando es 0, cambia a 1 y si es 1, cambia a 0.

Por último los operadores de desplazamiento (<<>>) sirven para desplazar los bits n posiciones hacia la izquierda o la derecha.


Booleanos


BÁSICO


Salida estándar


Para imprimir en pantalla un mensaje o el resultado de algun proceso se utiliza la función print:
print "Hola, esto es una cadena de texto"

Para imprimir el valor de una variable:
x = 20
print x

Para imprimir variables y texto combinados, se concatenan con el operador "+".
nombre = "Juan"
edad = 20
print "Hola, me llamo " + nombre + " y tengo " + edad + "años"

Entrada estándar


Para introducir datos desde el teclado se utilizan las funciones input y raw_input:

Si queremos introducir una cadena competa utilizaremos raw_input:
cadena = raw_input("Introduce una oracion: ")

Para un dato numerico se utiliza input:
x = input("Dame un valor: ")

ESTRUCTURAS DE CONTROL


Codicional

if condicion:
 proceso(s)

Por ejemplo:
if x == 2:
 print "x es un dos"

if ... else ...
if condicion:
 proceso(s)
else:
 proceso(s)

Por ejemplo
if x == 2:
 print "x es un dos"
else:
 print "x es igual a " + x

elif (multiples condiciones)
if condicion1:
 proceso(s)
elif condicion2:
 proceso(s)
elif condicion3:
 proceso(s)
else:
 proceso(s)

Por ejemplo:
if x == 1:
 print "x es igual a uno"
elif x == 2:
 print "x es igual a dos"
elif x == 3:
 print "x es igual a tres"
else:
 print "desconozco cuanto valga x"

Ciclo For

for var_iteracion in secuencia:
 proceso(s)

Por ejemplo
print "Inicia el conteo"
for i=1 in range (10):
 print i
print "FUEGO!!!"

Ciclo While


while condicion:
 proceso(s)

Por ejemplo
salir = False
while salir == False:
respuesta = raw_input("Desea Salir \n")
if(respuesta == "si"):
   salir=True
else:
   salir=False
print "Acabas de Salir"

Python y la Programación Orientada a Objetos


Conceptos Básicos


Para entender este paradigma primero tenemos que comprender qué es una clase y qué es un objeto.

Un objeto es una entidad que agrupa un estado y una funcionalidad relacionadas. El estado del objeto se define a través de variables llamadas atributos, mientras que la funcionalidad se modela a través de funciones a las que se les conoce con el nombre de métodos del objeto.

Un mensaje es la manera en que se comunican los objetos entre si, por eso cuando llamemos a alguna funcion de un objeto diremos que le estamos enviando un mensaje; entonces los metodos se encargan de procesar los mensajes que lleguen al objeto.

Una clase, por otro lado, no es más que una plantilla genérica a partir de la cuál instanciar los objetos; plantilla que es la que define qué atributos y métodos tendrán los objetos de esa clase.

Como ya mencione en la entrada de C++, las clases y por lo tanto los objetos tienen partes públicas y privadas, a la parte pública muy regularmente nos referiremos a ella como la interfaz, esta sera la única parte visible para los demas procesos y además la que esta dispuesta a compartir información y comunicarse con los demás.

La herencia se refiere basicamente al hecho de que una subclase, ademas de contener metodos y atributos propios tiene a su vez todos los atributos y métodos de la clase madre o superclase

Un ejemplo de objeto podría ser un coche, en el que tendríamos atributos como la marca, el número de puertas o el tipo de carburante y métodos como arrancar y parar. O bien cualquier otra combinación de atributos y métodos según lo que fuera relevante para nuestro programa.

Clases

En Python, una clase se declará con la palabra reservada class:
class Nombre_clase:
Importante señalar que el nombre de las clases por convención debe iniciar con mayúscula, aunque no es formalmente necesario para su correcto funcionamiento.

Si la clase no define atributos, pues no debe estar vacía, entonces se utilizará la palabra pass:
class Sin_atributos:
  pass
Equivalente a usar "{}" en otros lenguajes.

Métodos

Los métodos se declaran con la misma sintáxis que las funciones, con la palabra reservada def:
class Aritmetica:
  def suma(atributos):


Constructores???

Python no contiene formalmente lo que llamaremos Constructor, tienen un método llamado __init__ (con doble guion bajo antes y despues del nombre), su función es emular un constructor inicializando las variables o atributos:
class Aritmetica:
  def __init__ (self, x, y):
     self.a = x
     self.b = y

  def suma (self):
     print self.a + self.b
Este método es llamado automáticamente tras crear una instancia de la clase.

Como ya vimos, el primer atributo del método es self, que es una referencia al objeto recién creado, en otros mótodos se refiere a la instancia cuyo método ha sido llamado. Después de el pueden seguir la cantidad de argumentos que sean necesarios.

Instancias

Crear una instancia es tan fácil como enviar un valor a una función, en términos de OO, como enviar un mensaje a un método:
class Aritmetica:
  def __init__ (self, x, y):
     self.a = x
     self.b = y

  def suma (self):
     print self.a + self.b

def main():
  print "Suma mediante Programacion Orientada a Objetos"
  operacion = Aritmetica(3,5)
  operacion.suma()

if __name__ == "__main__":
  main()
En este ejemplo, la instancia se crea cuando "operacion" envia parámetros a "Aritmetica", recordemos que el metodo "__init__" se llama automáticamente por lo que ya tenemos asignados los parámetros a los atributos de la clase (suma1 y suma2).
Despues invocamos al método "suma" para realizar la operación, "suma" imprimirá el resultado final.

**RECUERDEN AGREGAR EL INTERPRETE AL CÓDIGO (#!/usr/lib/python) EN LA PRIMERA LÍNEA.

EJECUCIÓN DEL EJEMPLO ANTERIOR


No es necesario liberar de manera explícita las instancias (definir destructores) ya que Python elimina automáticamente las variables cuando salen del ámbito.

Herencia

Para declarar explícitamente la herencia de los atributos de la clase madre a otras subclases, es necesario colocar después del nombre de la subclase un paréntesis con el nombre de la clase madre, por ejemplo:
class Animales:
   pass

class Gato(Animales):
   pass

class Perro(Animales):
   pass

Encapsulación

Python no tiene modificadores de acceso explícitos, en su lugar el acceso a un atributo de determina en su nombre:

Privados: Si en el nombre del metodo se inicia con doble guión bajo y no termina con doble guión bajo:
class Animales:
  def __nombre(self):

Todos lo demas que no cumpla con esta regla se considera público.

Espero y les sirva bastante esta entrada sobre la programación orientada a objetos en Python

SALUDOS!!! ^_^

LENGUAJES ORIENTADOS A OBJETOS - C++

Laboratorio de Lenguajes de Programación - Semana 9

"C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.

Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma.

El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C."

FUENTE: http://es.wikipedia.org/wiki/C%2B%2B

C++ se considera un lenguaje híbrido porque ademas de incluir múltiples mecanismos para manejar objetos, se incluyen todas las funcionalidades de C, se puede decir que es un remix.

COMPILADOR

El S.O. de Ubuntu trae por defecto un compilador para C++ que forma parte del proyecto GCC, para llamarlo podemos ejecutar en la terminal la siguiente instrucción:

g++

Con ello llamaremos al compilador, que nos debe lanzar una ventana como esta:


La extension de los códigos fuente escritos en este lenguaje es *.cpp, los headers tienen la terminación *.hpp

VARIABLES

A grandes razgos podemos decir que los tipos de datos son los mismos que en el lenguaje C, sin embargo, un tipo de dato nuevo que llamo mi atencion es el llamado wchar_t, como sabemos la variable tipo char es de 1 byte, esto nos permitia manejar los 255 caractéres basicos del ASCII, pero en la actualidad ese estandar ASCII ha crecido con la inclusión de diferentes alfabetos de diferentes regiones; asi la variable wchar_t permite almacenar cualquier caracter que este por encima de los 255 del alfabeto ingles, por ejemplo símbolos griegos, cirílicos, chinos, etc.

Otra particularidad es el manejo de cadenas de caracteres, mientras en C teniamos que declarar un "arreglo" de caracteres, en C++ se utiliza la palabra string para declarar una cadena, claro que hay que incluir la libreria <string> por ejemplo:
C : char cadena[4] = "HOLA"

C++ : string cadena = "Esto es una cadena"



BÁSICO

La libreria estándar se C++ se llama iostream, tiene la misma funcionalidad que la libreria stdio.h, leer una sequencia de caractéres, números, o instrucciones desde el teclado, y tambien imprimir en pantalla los mensajes y resultados de los procesos ejecutados por nuestro programa. Tambien debemos agregar la línea using namespace std;

Salida Estándar

Para imprimir en la pantalla algun dato o mensaje desde nuestra aplicación usaremos cout; el cual obedece la siguiente sintaxis:
cout << "Cadena de salida"; // Imprime una cadena en pantalla
cout << 120;                // Imprime un numero
cout << x;                  // Imprime el contenido de la variable x
cout << "Hola, tengo " << x << " años y me llamo " << nombre; // Combinacion variables y texto

Al igual que en C, para saltar de línea se puede usar \n, pero tambien podemos indicarle que una línea ha terminado con endl, por ejemplo:
cout << "Primera linea." << endl;
cout << "Segunda linea." << endl; 

Que produciria la salida:
Primera linea.
Segunda linea

Entrada Estándar

Para ingresar datos se utiliza cin; de la siguiente manera:
int a, b, c, d;
string cadena;

cout << "Ingresa un valor -> ";
cin >> a;

cout << "Ingresa tres valores mas -> ";
cin >> b >> c >> d;

cout << "Ingresa una palabra -> ";
cin >> cadena;

La última sentencia es valida si deseamos introducir una palabra, si deseamos introducir una cadena de caractéres completa, se combinara cin con la instruccion getline:
string cadena;

cout << "Ingresa una cadena -> ";
getline(cin , cadena);

ESTRUCTURAS DE CONTROL

Existen diferentes estructuras de control que nos ayudaran a controlar nuestro programa dadas diferentes circunstancias especiales:

Estructura condicional

if (condicion) {proceso1; proceso2; ... ; proceson; }
if (x == 100)
 cout << "x es igual a 100";
.
"DOS POSIBILIDADES (Si no es uno es lo otro)"

if (condicion) proceso1; else proceso2
if (x == 100)
 cout << "x es igual a 100";
else
 cout << "x no es igual a 100";

"MULTIPLES POSIBILADES (Si no es esto entonces es esto, si no esto otro"

if (condicion) proceso1; else if (condicion2) proceso2; else proceso3;
if (x > 0)
 cout << "x es positiva";
else if (x < 0)
 cout << "x es negativa";
else
 cout << "x es 0";

Estructuras de Iteracion

Ciclo while

while (expresion) proceso;
int x = 10;
cout << "Comenzando conteo Houston . . ."
while (x>0) {
   cout << x << endl;
   --x;
}
cout << "FUEGO!!!";

Ciclo do-while

do proceso while (expresion);
int x;
do {
  cout << "Ingresa un numero (0 para salir);
  cin >> x;
  cout << "Igresaste el numero " x;
} while (x != 0);

Ciclo for

for (inicializacion; condicion; incremento) procesos;
int x;
cout << "Inicia el conteo Houston . . .";
for(x = 10; x > 0; x--)
   cout << x << "-";
cout << "FUEGO!!!";

Estructura Selectiva

switch (expresion) {
case constante1:
grupo de procesos 1;
break;
case constant2:
grupo de procesos 2;
break;
.
.
.
default:
grupo de procesos por default (cuando no se cumple ninguno de los anteriores);
}
switch (x) {
 case 1:
   cout << "x es 1";
   break;
 case 2:
   cout << "x es 2";
   break;
 default:
   cout << "el valor de x se desconoce";
 }

C++: Programación Orientada a Objetos


Clases y Objetos


Una clase es un concepto ampliado de una estructura de datos, pero en lugar de mantener sólo los datos, que puede contener tanto datos como funciones.

Un objeto es una creación de instancias de una clase.

En términos de coloquiales de variables, una clase sería el tipo y un objeto sería la variable.

Las clases se declaran con la palabra reservada class, y su estructura sería como la siguiente:
class nombre_clase {
 especificador_de_acceso1:
   miembro1;
 especificador_de_acceso2:
   miembro2;
 ...
 } nombre_del_objeto;

Los especificadores de acceso pueden ser de tres tipos:

private (miembros privados) Miembros de una clase que sólo son accesibles desde el interior de los demás miembros de la misma clase o de sus amigos.
protected (miembros protegidos) Miembros que son accesibles desde los miembros de su misma clase y de sus amigos, y también de los miembros de sus clases derivadas.
public (miembros publicos) Son accesibles desde cualquier lugar donde el objeto es visible.

Por ejemplo:
class CRectangle {
   int x, y;
 public:
   void set_values (int,int);
   int area () {return (x*y);}
}rect;

Mi clase se llama CRectangle, y el objeto completo se llama rect, aunque no los hayamos especificado como tales tenemos dos miembros privados x y y (ya que el nivel de acceso por default es private, después tenemos otros dos miembros públicos: void valores (int,int); y int area (void);. "set_values" será considerado como un emulador de un constructor, porque inicializara los valores de "x" y "y", mientras que "area" calculara el área del rectángulo.

Pequeño Ejemplo
#include <iostream>
using namespace std;

class CRectangle {
   int x, y;
 public:
   void set_values (int,int);
   int area () {return (x*y);}
};

void CRectangle::set_values (int a, int b) {
 x = a;
 y = b;
}

int main () {
 CRectangle rect;
 rect.set_values (3,4);
 cout << "area: " << rect.area();
 return 0;
}

Comenzando en la función main: Primero creamos un objeto de la clase CRectangle llamado "rect". Llamamos a lo que denominamos "constructor" enviandole los 2 parámetros que son los lados del rectángulo, estos valores se envían a la función "void CRectange::set_values (int a, int b)" el cual asignará los 2 valores enviados a los miembros privados "x" y "y". Después imprimimos el valor del área calculada llamando a "rect.area", el cual esta preparado para regresarnos el producto de los dos lados.

EJECUCIÓN

Constructores y Destructores


Todos los objetos necesitan inicializar las variables al momento de ser llamados y volverse operativos. En el ejemplo anterior nosotros necesitamos asignar un valor a las variables "x" y "y" si realmente queremos que se nos regrese algún resultado al momento de ejecutar nuestro programa, es por ello que necesitamos lo que denomina Constructor.

Los constructores tienen el mismo nombre que la clase madre y son llamados automaticamente cuando un objeto de su misma clase es creado. Estos constructores no regresan ningun valor, ni siquiera void.

Un destructor cumple la función opuesta, son llamados cuando un objeto es destruido porque su tiempo de existencia ha terminado ya sea porque el objeto de definió localmente en una función y el proceso de la función terminó o porque se trataba de un objeto asignado dinamicamente y la memoria ocupada se libera con "delete". Los destructores se declaran como miembros de la clase y se deben llamar igual, pero van precedidos por un tilde (~), al igual que los constructores no regresan nada al terminar su ejecucion.

Si nosotros quisieramos implementar un constructor y un destructor en el ejemplo anterior basta con reemplazar la funcion "void set_values"; asi el nuevo miembro público se llamaría CRectangle (int,int), que sería el constructor. Y la función quedaría de esta forma:
CRectangle::CRectangle (int a, int b) {
 x = a;
 y = b;
}

Y nuestro destructor se llamaría ~CRectangle ();, y tendriamos que darle algunos procesos:
CRectangle::~CRectangle () {
 delete width;
 delete height;
}

Su tarea sera la de liberar la memoria ocupada por las variables "width" y "height".

EJEMPLO UTILIZANDO CONSTRUCTOR Y DESTRUCTOR
#include <iostream>
using namespace std;

class CRectangle {
   int *width, *height;
 public:
   CRectangle (int,int);
   ~CRectangle ();
   int area () {return (*width * *height);}
};

CRectangle::CRectangle (int a, int b) {
 width = new int;
 height = new int;
 *width = a;
 *height = b;
}

CRectangle::~CRectangle () {
 delete width;
 delete height;
}

int main () {
 CRectangle rect (3,4), rectb (5,6);
 cout << "rect area: " << rect.area() << endl;
 cout << "rectb area: " << rectb.area() << endl;
 return 0;
}


EJECUCIÓN


Ahora implementamos 2 instancias diferentes de la misma clase y los mismos miembros.

Estos son algunos aspectos basicos del lenguaje C++, claro que faltan otros mas por analizar. Si les interesa seguir aprendiendo pueden ver el tutorial que les deje en mis Recursos, donde podrán aprender otros conceptos relacionados a la programación orientada a objetos.

SALUDOS!!! ^_^