I.N.G. EN TECNOLOGAS DE LA INFORMACIN Y COMUNICACIN PROGRAMACIN DE APLICACIONES
ING. Isaas Ara Hernndez
Grupo: B Sistema de ventas de Artculos (Pc- Reparaciones)
TABLA DE CONTENIDO INTRODUCCIN .............................................................................................................................. 2 PLANTEAMIENTO DEL PROBLEMA ......................................................................................... 3 DESARROLLO ................................................................................................................................. 3 PROGRAMACIN ORIENTADA A OBJETO (POO) ............................................................ 3 CONCEPTOS FUNDAMENTALES .......................................................................................... 3 CLASE ....................................................................................................................................... 3 OBJETO .................................................................................................................................... 5 ATRIBUTO ................................................................................................................................ 7 MTODO ................................................................................................................................... 8 HERENCIA ................................................................................................................................ 9 ASOCIACIN ........................................................................................................................... 9 AGREGACIN ....................................................................................................................... 11 POLIMORFISMO.................................................................................................................... 11 CONCLUSIN ................................................................................................................................ 27
INTRODUCCIN La programacin orientada a objetos conocida como (POO) es un paradigma o modelo de programacin. Esto significa que no es un lenguaje especfico, o una tecnologa, sino una forma de programar, una manera de plantearse la programacin. No es la nica o necesariamente mejor o peor que otras, pero se ha constituido en una de las formas de programar ms populares e incluso muchos de los lenguajes que usamos hoy en da lo soportan o estn diseados bajo ese modelo como lo son: PHP, JAVA, C#, etc. La programacin orientada a objeto busca darle soluciones informticas identificando cual sea el problema que se tiene, esto se realiza identificando los conceptos relevantes o las entidades involucradas, reconociendo las caractersticas que estos tienen y las acciones que estos realizan o bien s es que producen un efecto sobre ellos. La programacin orientada a objetos es una forma de desarrollar un sistema, pensando en las entidades principales del problema que el sistema pretende resolver, donde el lenguaje de programacin es la herramienta para darle la solucin a dicho problema. Lo que caracteriza a la POO es que lleva todo lo que pensamos respecto a las funcionalidades del sistema a una base de cdigo. En el mundo real Cuando observamos a nuestro alrededor podemos visualizar cosas, objetos, pero podemos reconocer estos objetos porque cada objeto pertenece a una clase, eso nos permite distinguir, por ejemplo, un perro de un auto porque son de clases diferentes y tambin un TV de otro porque, aunque sean iguales, cada uno es un objeto distinto. ste es el modelo que la POO intenta seguir para estructurar un sistema.
PLANTEAMIENTO DEL PROBLEMA La problemtica surge debido que en la empresa Pc-Reparaciones no tiene un software que le brinde un servicio para sus ventas de artculos electrnicos as como accesorios de computadoras, por eso surge la necesidad de desarrollar un sistema que optimice las soluciones de la empresa. DESARROLLO PROGRAMACIN ORIENTADA A OBJETO (POO) La programacin Orientada a Objetos es una metodologa que basa la estructura de los programas en torno a los objetos. Los lenguajes de POO ofrecen medios y herramientas para describir los objetos manipulados por un programa. Ms que describir cada objeto individualmente, estos lenguajes proveen una construccin (Clase) que describe a un conjunto de objetos que poseen las mismas propiedades. CONCEPTOS FUNDAMENTALES CLASE Las clases son uno de los principales componentes de un lenguaje de programacin, pues en ellas ocurren todos los procesos lgicos requeridos para un sistema, en si podemos definirlas como estructuras que representan objetos del mundo real, tomando como objetos a personas, lugares o cosas, en general las clases poseen propiedades, comportamientos y relaciones con otras clases del sistema.
Una clase se compone por tres partes fundamentales:
Nombre: Contiene el Nombre de la Clase. Atributos: Representan las propiedades que caracterizan la clase. Mtodos: Representan el comportamiento u operaciones, la forma como interacta la clase con su entorno. La clase puede definirse como la agrupacin o coleccin de objetos que comparten una estructura comn y un comportamiento comn. Es una plantilla que contiene la descripcin general de una coleccin de objetos. Consta de atributos y mtodos que resumen las caractersticas y el comportamiento comunes de un conjunto de objetos. Todo objeto (tambin llamado instancia de una clase), pertenece a alguna clase. Mientras un objeto es una entidad concreta que existe en el tiempo y en el espacio, una clase representa solo una abstraccin. Todos aquellos objetos que pertenecen a la misma clase son descritos o comparten el mismo conjunto de atributos y mtodos. Todos los objetos de una clase tienen el mismo formato y comportamiento, son diferentes nicamente en los valores que contienen sus atributos. Todos ellos responden a los mismos mensajes. Caractersticas Generales Una clase es un nivel de abstraccin alto. La clase permite describir un conjunto de caractersticas comunes para los objetos que representa. Ejemplo: La clase Avin se puede utilizar para definir los atributos (tipo de avin, distancia, altura, velocidad de crucero, capacidad, pas de origen, etc.) y los mtodos (calcular posicin en el vuelo, calcular velocidad de vuelo, estimar tiempo de llegada, despegar, aterrizar, volar, etc.) de los objetos particulares Avin que representa. Un objeto es una instancia de una clase. Cada objeto concreto dentro de un sistema es miembro de una clase especfica y tiene el conjunto de atributos y mtodos especificados en la misma Las clases se relacionan entre s mediante una jerarqua. Entre las clases se establecen diferentes tipos de relaciones de herencia, en las cuales la clase hija (subclase) hereda los atributos y mtodos de la clase padre (superclase), adems de incorporar sus propios atributos y mtodos. OBJETO Es una entidad (tangible o intangible) que posee caractersticas y acciones que realiza por s solo o interactuando con otros objetos. Un objeto es una entidad caracterizada por sus atributos propios y cuyo comportamiento est determinado por las acciones o funciones que pueden modificarlo, as como tambin las acciones que requiere de otros objetos. Un objeto tiene identidad e inteligencia y constituye una unidad que oculta tanto datos como la descripcin de su manipulacin. Puede ser definido como una encapsulacin y una abstraccin: una encapsulacin de atributos y servicios, y una abstraccin del mundo real. Para el contexto del Enfoque Orientado a Objetos (POO) un objeto es una entidad que encapsula datos (atributos) y acciones o funciones que los manejan (mtodos). Tambin para la POO un objeto se define como una instancia o particularizacin de una clase. Los objetos de inters durante el desarrollo de software no slo son tomados de la vida real (objetos visibles o tangibles), tambin pueden ser abstractos. En general son entidades que juegan un rol bien definido en el dominio del problema. Un libro, una persona, un carro, un polgono, son apenas algunos ejemplos de objeto. Cada objeto puede ser considerado como un proveedor de servicios utilizados por otros objetos que son sus clientes. Cada objeto puede ser a la vez proveedor y cliente. De all que un programa pueda ser visto como un conjunto de relaciones entre proveedores clientes. Los servicios ofrecidos por los objetos son de dos tipos: 1. Los datos, que llamamos atributos. 2. Las acciones o funciones, que llamamos mtodos.
Caractersticas Generales Un objeto se identifica por un nombre o un identificador nico que lo diferencia de los dems. Ejemplo: el objeto Cuenta de Ahorros nmero 12345 es diferente al objeto Cuenta de Ahorros nmero 25789. En este caso el identificador que los hace nicos es el nmero de la cuenta.
Un objeto posee estados. El estado de un objeto est determinado por los valores que poseen sus atributos en un momento dado.
Un objeto tiene un conjunto de mtodos. El comportamiento general de los objetos dentro de un sistema se describe o representa mediante sus operaciones o mtodos. Los mtodos se utilizarn para obtener o cambiar el estado de los objetos, as como para proporcionar un medio de comunicacin entre objetos.
Un objeto tiene un conjunto de atributos. Los atributos de un objeto contienen valores que determinan el estado del objeto durante su tiempo de vida. Se implementan con variables, constantes y estructuras de datos (similares a los campos de un registro)
Los objetos soportan encapsulamiento. La estructura interna de un objeto normalmente est oculta a los usuarios del mismo. Los datos del objeto estn disponibles solo para ser manipulados por los propios mtodos del objeto. El nico mecanismo que lo conecta con el mundo exterior es el paso de mensajes.
Un objeto tiene un tiempo de vida dentro del programa o sistema que lo crea y utiliza. Para ser utilizado en un algoritmo el objeto debe ser creado con una instruccin particular (New o Nuevo) y al finalizar su utilizacin es destruido con el uso de otra instruccin o de manera automtica ATRIBUTO Son los datos o variables que caracterizan al objeto y cuyos valores en un momento dado indican su estado. Un atributo es una caracterstica de un objeto. Mediante los atributos se define informacin oculta dentro de un objeto, la cual es manipulada solamente por los mtodos definidos sobre dicho objeto Un atributo consta de un nombre y un valor. Cada atributo est asociado a un tipo de dato, que puede ser simple (entero, real, lgico, carcter, string) o estructurado (arreglo, registro, archivo, lista, etc.) Su sintaxis algortmica es: <Modo de Acceso> <Tipo de dato> <Nombre del Atributo>; Los modos de acceso son: Pblico: Atributos (o Mtodos) que son accesibles fuera de la clase. Pueden ser llamados por cualquier clase, aun si no est relacionada con ella. Este modo de acceso tambin se puede representar con el smbolo +
Privado: Atributos (o Mtodos) que slo son accesibles dentro de la implementacin de la clase. Tambin se puede representar con el smbolo
Protegido: Atributos (o Mtodos) que son accesibles para la propia clase y sus clases hijas (subclases). Tambin se puede representar con el smbolo #
MTODO Son las operaciones (acciones o funciones) que se aplican sobre los objetos y que permiten crearlos, cambiar su estado o consultar el valor de sus atributos. Los mtodos constituyen la secuencia de acciones que implementan las operaciones sobre los objetos. La implementacin de los mtodos no es visible fuera de objeto. La sintaxis algortmica de los mtodos expresados como funciones y acciones es: Para funciones se pueden usar cualquiera de estas dos sintaxis: <Modo de Acceso> Funcin <Nombre> [(Lista Parmetros)]: <Descripcin del Tipo de datos> Para acciones: <Modo de Acceso> Accin <Nombre> [(Lista Parmetros)] donde los parmetros son opcionales Ejemplo: Un rectngulo es un objeto caracterizado por los atributos Largo y Ancho, y por varios mtodos, entre otros Calcular su rea y Calcular su permetro. Caractersticas Generales Cada mtodo tiene un nombre, cero o ms parmetros (por valor o por referencia) que recibe o devuelve y un algoritmo con el desarrollo del mismo.
En particular se destaca el mtodo constructor, que no es ms que el mtodo que se ejecuta cuando el objeto es creado. Este constructor suele tener el mismo nombre de la clase/ objeto, pero aunque es una prctica comn, el mtodo constructor no necesariamente tiene que llamarse igual a la clase (al menos, no en seudocdigo). Es un mtodo que recibe cero o ms parmetros y lo usual es que inicialicen los valores de los atributos del objeto.
En lenguajes como Java y C++ se puede definir ms de un mtodo constructor, que normalmente se diferencian entre s por la cantidad de parmetros que reciben. Los mtodos se ejecutan o activan cuando el objeto recibe un mensaje, enviado por un objeto o clase externo al que lo contiene, o por el mismo objeto de manera local. HERENCIA La herencia es especfica de la programacin orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene los atributos y mtodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y mtodos nuevos para la subclase, que luego se aplican a los atributos y mtodos heredados. Esta particularidad permite crear una estructura jerrquica de clases cada vez ms especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. ASOCIACIN Las asociaciones son conexiones conceptuales entre clases. Por ejemplo la asociacin, entre trabajador y empresa. Un trabajador labora en una empresa la asociacin conectara con una lnea a trabajador y empresa, si vemos los roles de cada uno podemos decir que el trabajador es un empleado y la empresa es la empleadora. Labora en es el nombre de la asociacin y la colocamos sobre la linea, mientras que los roles (empleado, empleador) los colocamos bajo la lnea a cada lado segn corresponda. As nuestra relacin Un trabajador labora en una empresa en UML se vera as:
Las asociaciones pueden funcionar en ambos sentidos. Si vemos el ejemplo anterior desde la perspectiva de la empresa, la asociacin sera Una empresa emplea trabajadores
Notemos que para comprender el sentido de la asociacin aadimos una flecha. Las asociaciones no se limitan conectar una clase con otra, pueden conectarse varias clases con una.
Cuando necesitamos especificar ms detalles en las asociaciones como restricciones podemos especificarlas encerrndolas entre llaves. Por ejemplo un cajero atiende a un cliente, pero cada cliente es atendido en el orden de su llegada.
AGREGACIN Una agregacin es una acumulacin de clases. Es decir una clase est formada por otras. Por ejemplo un auto est formado por su motor, chasis, carrocera entre otras cosas. En UML esto se representara as:
Composicin Una composicin es un tipo de agregacin, la cual determina una restriccin. Cada componente de una agregacin puede pertenecer tan solo a un todo. Esto se representa de igual forma que una agregacin, con la diferencia de que el rombo esta rellenado. POLIMORFISMO Es la capacidad que tienen los objetos de responder al mismo mensaje o eventos en funcin de los parmetros utilizados durante su invocacin. El polimorfismo determina que el mismo nombre de mtodo, realizar diferentes acciones segn el objeto sobre el que sea aplicado. Pasando a un ejemplo real, tomamos dos objetos: Pelota y Vaso Cristal; si ejecutamos sobre ambos el mtodo Tirar, el resultado en ambos casos ser muy diferente; mientras que el objeto Pelota rebotar al llegar al suelo, el objeto Vaso Cristal se romper. Tomando como ejemplo la imagen anterior, podemos decir que un objeto de la clase FiguraGeometrica puede usarse para referirse a cualquier objeto de cualquier subClase de FiguraGeometrica en otras palabras una figura geomtrica puede ser un cuadro, un tringulo, un cuadrado o cualquier figura que en trminos generales sea geomtrica.
CDIGO DEL SISTEMA CLASE CONEXION package pc.reparaciones; import java.sql.*; public class conectate { private final String bd = "dbFactura"; private final String login = "root"; private final String password = ""; private final String url = "jdbc:mysql://localhost/"+bd; Connection conn = null; /** Constructor de DbConnection */ public conectate() { try{ //obtenemos el driver de para mysql Class.forName("com.mysql.jdbc.Driver"); //obtenemos la conexin conn = DriverManager.getConnection(url,login,password); if (conn!=null){ System.out.println("Conexin a base de datos "+bd+". listo"); } }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } /**Permite retornar la conexin*/ public Connection getConnection(){ return conn; } public void desconectar(){ conn = null; System.out.println("La conexion a la base de datos "+bd+" a terminado"); } } package pc.reparaciones; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.ResultSet;
public class Sql { private conectate con; public Sql(){ con = new conectate(); } /* * INSERTRA UN NUEVO REGISTRO EN LA BASE DE DATOS * PARAMETROS(Un array de String con los datos a insertar,la instruccion sql) */ public boolean Ejecutar_Insruccion_Sql(String datos[], String sql){ boolean ok=false; try { PreparedStatement pstm = con.getConnection().prepareStatement(sql); for(int i=0; i<=datos.length-1;i++){ pstm.setString(i+1, datos[i]); } pstm.execute(); pstm.close(); ok=true; }catch(SQLException e){ System.out.println(e); } return ok; } public boolean existe(String campo, String from_where){ int registros = 0; try{ PreparedStatement pstm = con.getConnection().prepareStatement("SELECT count("+campo+") as total " + from_where); ResultSet res = pstm.executeQuery(); res.next(); registros = res.getInt("total"); res.close(); }catch(SQLException e){ System.out.println(e); } //true: existe //false: no existe if (registros >0){return true;}else{return false;} } public String GetDataString(String colName, String sql){ String data =""; try{ PreparedStatement pstm = con.getConnection().prepareStatement(sql); ResultSet res = pstm.executeQuery(); while(res.next()){ data = res.getString(colName); } res.close(); }catch(SQLException e){ System.out.println(e); } return data; } public Double GetDataDouble(String colName, String sql){ double data =0; try{ PreparedStatement pstm = con.getConnection().prepareStatement(sql); ResultSet res = pstm.executeQuery(); while(res.next()){ data = res.getDouble(colName); } res.close(); }catch(SQLException e){ System.out.println(e); } return data; }
public Object[] GetColumna(String tabla, String colName, String sql){ int registros = 0; //obtenemos la cantidad de registros existentes en la tabla try{ PreparedStatement pstm = con.getConnection().prepareStatement("SELECT count(*) as total FROM " + tabla); ResultSet res = pstm.executeQuery(); res.next(); registros = res.getInt("total"); res.close(); }catch(SQLException e){ System.out.println(e); }
Object[] data = new Object[registros]; try{ PreparedStatement pstm = con.getConnection().prepareStatement(sql); ResultSet res = pstm.executeQuery(); int i = 0; while(res.next()){ data[i] = res.getObject(colName); i++; } res.close(); }catch(SQLException e){ System.out.println(e); } return data; } /* METODO PARA OBTENER TODOS LOS DATOS DE UNA TABLA * parametros (Un array con los nombres de las columnas, el nombre de la tabla, la instruccion sql) */ public Object [][] GetTabla(String colName[], String tabla, String sql){ int registros = 0; //obtenemos la cantidad de registros existentes en la tabla try{ PreparedStatement pstm = con.getConnection().prepareStatement("SELECT count(*) as total FROM " + tabla); ResultSet res = pstm.executeQuery(); res.next(); registros = res.getInt("total"); res.close(); }catch(SQLException e){ System.out.println(e); } Object[][] data = new String[registros][colName.length]; String col[] = new String[colName.length]; //realizamos la consulta sql y llenamos los datos en "Object" try{ PreparedStatement pstm = con.getConnection().prepareStatement(sql); ResultSet res = pstm.executeQuery(); int i = 0; while(res.next()){ for(int j=0; j<=colName.length-1;j++){ col[j] = res.getString(colName[j]); data[i][j] = col[j]; } i++; } res.close(); }catch(SQLException e){ System.out.println(e); } return data; } } CLASE CONTROL package pc.reparaciones; public class Control { private Sql mySql = new Sql(); //variables privadas private String ID_Cliente=""; private String NumFactura=""; private iFactura Factura; private Numero_a_Letra NL = new Numero_a_Letra(); public Control(){ } public boolean existe_cliente(String ID){ this.ID_Cliente=ID; return mySql.existe("ID", " from clientes where id='"+ID+"';"); } public String getNameCliente(){ return mySql.GetDataString("nombre", "select nombre from clientes where id='"+this.ID_Cliente+"';"); } public Object[] getID_Producto(){ return mySql.GetColumna("producto", "id", "select id from producto;"); } public Object[][] getDataProducto(String idProducto){ String[] columnas={"nombre","precioU","Cantidad"}; Object[][] data = mySql.GetTabla(columnas, "producto", "select * from producto where id='"+idProducto+"';"); return data; } //devuelve un codigo de 10 caracteres alfabeticos al azar public String GenerarNumFactura(){ String cod="FACT-"; for(int i=1; i<=5;i++){ int num = (int)((Math.random()*(90-65))+65); cod = cod + (char) num; } NumFactura = cod; return cod; } public String getNumFactura(){ return this.NumFactura; } public void CrearFactura(String NumeroFactura, String Vendedor){ String[] datos = {NumeroFactura, Vendedor, "",ID_Cliente}; mySql.Ejecutar_Insruccion_Sql(datos, "insert into factura(Num,Vendedor,observacion,id_cliente) values(?,?,?,?);"); } public boolean Actualizar_Observaciones(String obs){ String[] datos = {obs,this.NumFactura}; return mySql.Ejecutar_Insruccion_Sql(datos, "update factura set Observacion=? where Num=?;"); } //registra un producto en la tabla detalle, pero tambien actualiza la cantidad de la tabla producto public boolean RegistrarProducto(String idProducto,String NumFactura,String Cantidad, String precio, String total){ String[] datos = {idProducto, NumFactura, Cantidad,precio,total} String[] datosP = {Cantidad,idProducto}; If mySql.Ejecutar_Insruccion_Sql(datosP, "update producto set cantidad=cantidad-? where ID=?;")) { return mySql.Ejecutar_Insruccion_Sql(datos, "insert into detalle(id_producto,num_factura,cantidad,precioU,total) values(?,?,?,?,?);"); }else{ return false; } } public Object[][] getDetalle(String nFactura){ String[] columnas={"id_producto","cantidad","precioU","total"}; Object[][] data = mySql.GetTabla(columnas, "detalle where num_factura='"+nFactura+"';", "select * from detalle where num_factura='"+nFactura+"';"); return data; } public Object[][] getClientes(){ String[] columnas={"ID","nombre","direccion","persona_telefono"}; Object[][] data = mySql.GetTabla(columnas, "clientes", "select * from clientes;"); return data; } public Double getTotal(){ return mySql.GetDataDouble("t", "select round( sum( total ) , 2 ) as t from detalle where num_factura='"+this.NumFactura+"';"); }
public void VerFactura(){ String Total = getTotal()+""; Factura = new iFactura(); Factura.ver_Factura( NumFactura, NL.Convertir(Total, true) , Total); } }
CONCLUSIN En la programacin orientada a objetos tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en trminos de objetos, propiedades, mtodos, herencia, polimorfismos, etc. La programacin orientada a objetos permite la optimizacin del cdigo generado, gracias a que mediante tcnicas de herencia, atributos entre otros nos permiten, que el cdigo sea genrico de manera que sea reutilizable. La Programacin Orientada a Objetos es la abstraccin de la realidad, es decir, cuando se tiene un problema puntual de la realidad, este problema puede ser modelado para darle una solucin computacional. La Programacin Orientada a Objetos propone representar todo lo que se conoce como objeto, que interacta y se relaciona entre s. Dicho objeto puede representarse absolutamente en cualquier cosa, desde algo fsico y tangible como una persona, una factura o un auto hasta cosas no intangibles como la imaginacin o algn algoritmo matemtico. La POO no es difcil, pero es una manera especial de pensar, de manera que la forma de hacer las cosas puede ser diferente segn el programador. Aunque se logren hacer los programas de formas distintas, no todas son correctas; lo difcil no es programar orientando a objetos sino programar bien. Programar bien es importante porque as el programador aprovecha todas las ventajas de la POO.