1 / 158

Programación Orientada a Ojetos

Programación Orientada a Ojetos. M.C. Juan Carlos Olivares Rojas. jolivares@uvaq.edu.mx http://antares.itmorelia.edu.mx/~jcolivar Noviembre, 2009. Programación Orientada a Objetos. ¿Cuál es la diferencia entre una estructura y una clase si las dos son ADT (Tipos de Datos Abstractos)?

matty
Télécharger la présentation

Programación Orientada a Ojetos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación Orientada a Ojetos M.C. Juan Carlos Olivares Rojas jolivares@uvaq.edu.mx http://antares.itmorelia.edu.mx/~jcolivar Noviembre, 2009

  2. Programación Orientada a Objetos ¿Cuál es la diferencia entre una estructura y una clase si las dos son ADT (Tipos de Datos Abstractos)? La encapsulación La encapsulación permite colocar datos lógicamente relacionados como constantes, variables, funciones en una sola entidad. Ejemplos son los paquetes y clases.

  3. POO La visibilidad y el ocultamiento de la información es sumamente importante. Este paradigma basa su funcionamiento en la creación de objetos que se dan a través de moldes predeterminados llamado clases. No es reinventar la rueda, simplemente es estructurar de mejor forma el paradigma imperativo.

  4. POO La reutilización de componentes como son los mecanismos de herencia y polimorfismo hacen que la construcción de código sea más simple. El primer lenguaje basado en este paradigma fue Smalltalk. Lenguajes como Java son considerado lenguajes orientados a objetos no puros, ya que tienen componentes de programación estructurada.

  5. POO En esta unidad se verán conceptos avanzados del paradigma orientado a objetos así como mejores prácticas de desarrollo. Se seguirá una dinámica parecida a la de la unidad pasada.

  6. Refactorización La refactorización es el proceso que consiste en cambiar la estructura interna de un programa sin modificar su comportamiento externo. La refactorización es parte importante del proceso de reingeniería y puede enfocarse a la reestructuración de códigos

  7. Refactorización Las herramientas actuales permiten más que simplemente buscar una cadena de texto y sustituirla por otra. Al hacer uso de la refactorización permiten una reestructuración más simple y menos propensa a errores. NetBeans desde su versión 5.0 soporta refactorización.

  8. Refactorización Las principales herramientas con las que se cuenta son: Renombrado para cambiar de manera segura el nombre (si no se aplica a esto, un comando de sustituir todo puede ser perjudicial), mover, copiar, borrar, cambiar parámetros de los métodos, encapsular campos de una clase (crear métodos get/set).

  9. Refactorización Se pueden extraer elementos para crear interfaces, se pueden introducir variables, constantes, métodos, atributos. En algunos casos es más tardado usar la herramienta que realizar la reestructuración de código a mano. En NetBeans y algunos otros IDEs se cuentan con herramientas para manipular el código fuente.

  10. Refactorización Para dar formato (si es que el código no se creo en un IDE), eliminar espacios en blanco innecesarios, identar a la izquierda y a la derecha, subir, bajar líneas, duplicar líneas, completar, insertar código, etc. Estas herramientas pueden utilizarse para generar patrones repetitivos de código en funciones.

  11. Refactorización Para la reestructuración de códigos se pueden seguir convenciones ya definidas las más importantes son la notación húngara y la notación de camello. La notación húngara fue creada por Charles Simonyi de Microsoft, el cual es húngaro y por eso recibió ese nombre.

  12. Notación Húngara Es un método ampliamente usado sobre todo para convención de nombres de variables. Consiste en tener variables autodocumentadas agregando un prefijo de tres caracteres o menos para indicar su tipo. Las abreviaturas de los tipos de datos puede variar dependiendo del lenguaje de programación.

  13. Notación Húngara

  14. Notación húngara int nTest; long lTemp; char *szString = "Prueba"; struct Rect srRect; int nMiVariableEjemplo; char szEjemploString; int NNOMBREINVALIDO; int nNombre_Incorrecto;

  15. Notación Húngara Las funciones o subrutinas no se les agrega abreviaciones, se recomiendan tengan un nombre descriptivo. Los nombres de las clases van en mayúsculas. Se pueden tener nuevos tipos de datos sólo se deben de poner las nuevas nomenclaturas.

  16. Notación de Camello Es la utilizada por Java y herramientas afines. Su uso está creciendo en popularidad mientras que la notación húngara va en desuso. Su principal característica consiste en que no separa nombres de identificadores (variables, métodos, objetos) con “_” para palabras compuestas.

  17. Notación de Camello Los identificadores tienen la forma de la joroba de un camello. No se indican tipos de datos. Sigue respetando mucho de la Notación C. Los métodos inician en minúsculas y si hay una palabra compuesta esta inicia con mayúscula dando la apariencia de una joroba.

  18. Notación Camello Las clases inician con mayúscula siguiendo el mismo método. Los métodos para acceder a atributos de las clases no públicos deben llamarse por convención set y get.

  19. Reutilización El reuso es una de las técnicas de resolución de problemas que más utilizamos los humanos. De hecho es lo primero que verifica nuestro cerebro. El reuso en software nos ayuda a mejorar la producción y calidad del software al “no reinventar la rueda”.

  20. Reuso El reuso nos permite afrontar los grandes proyectos de software sin mayores complicaciones. Desafortunadamente no todo se puede reutilizar. La reutilización es la propiedad de utilizarconocimiento, procesos, metodologías o componentes de software ya existente para adaptarlo a una nueva necesidad, incrementando significativamente la calidad y productividad del desarrollo.

  21. Reutilización La reutilización puede ser composicional,generativa y adapativa. Es composicional cuando se orienta al reuso del producto. Puede ser de caja blanca (si nos interesa modificar el comportamiento), caja negra (cuando no se puede modificar el comportamiento) y adaptativo cuando es una mezcla de ambos.

  22. Reutilización La reutilización por generación se da cuando se utilizan esfuerzos previos del desarrollo de software. Para que un objeto pueda ser reusable se necesita de un alto nivel de abstracción. Entre mayor es su nivel de abstracción, mayor es su nivel de reuso.

  23. Reuso Tipos de reuso: Código reciclado: utilizar parte del código definido en otros proyectos. Componentes de código: consiste en utilizar módulos, clases, APIs, etc. Esquemas: DFD, DiagramasUML.

  24. Reuso Frameworks: Solución integrada para la resolución de problemas en un contexto particular. Se pueden utilizar patrones de diseño. Un ejemplo de Framework es .NET Las etapas del proceso de reuso son: Adquisición del requerimiento.

  25. Reuso • Búsqueda y Recuperación • Recuperación por Palabras Claves • Recuperación Basada en la Estructura • Recuperación Enumerada • Identificación • Adecuación

  26. Reingeniería del Software Sucede que si una aplicación necesita ser modificada constantemente y no tiene una metodología de seguimiento del desarrollo del proyecto, la modificación del software se vuelve sumamente complicada. El mantenimiento de software en algunos casos puede llegar a ser del 60% del total de costos del proyecto.

  27. Reingeniería del Software Aún cuando un software se haya desarrollado con la mejor metodología de software tendrá que ser modificado en un futuro por algún motivo, debido a que lo único constante es el cambio. Los tipos de mantenimiento de Software son: correctivo, adaptativo, mejoras o mantenimiento de perfeccionamiento, mantenimiento preventivo o reingeniería.

  28. Reingeniería del Software El 80% del tiempo del desarrollo del software se ocupa en la adaptación del software a su ambiente externo. La reingeniería de software es costosa y consumidora de tiempo. La reingeniería es una actividad de reconstrucción, preferible de realizar antes de que se “derrumbe” la obra.

  29. Reingeniería de Software Antes de derribar una casa, quizás se necesita corroborar que está mal. La reingeniería es un proceso que altera los elementos internos de toda obra, no es una sola remodelación de la fallada. Generalmente se siguen los siguientes pasos para aplicar reingeniería:

  30. Reingeniería de Software Análisis de Inventario Reestructuración de Documentos INGENIERÍA INVERSA Reestructuración de Códigos Reestructuración de Datos Ingeniería directa

  31. Ingeniería Inversa Se aplica para obtener un modelo detallado de análisis, ingeniería de requerimientos, diseño y en algunos casos implementación teniendo una solución, la cual es una actividad consumidora de tiempo. Tanto la Ingeniería Inversa como la Reingeniería en la mayoría de las licencias de Software se encuentran penadas por la ley.

  32. Javadoc Es el estándar para crear documentación para los proyectos en Java. Es una herramienta estándar del JDK de Sun Microsystem. Crea documentación en HTML y casi cualquier IDE lo hace. Se deben utilizar los comentarios especiales /** …..*/ con algunas palabras clave para determinar la documentación.

  33. Javadoc Las palabras clave inician con una arroba. Se puede incrustar cualquier etiqueta de HTML para hacer más visible la documentación. @author nombre_desarrollador @deprecated descripción //indica un método que no se utiliza su uso

  34. Javadoc @param nombre descripción @return descripción //no se debe utilizar con métodos void. @see referencia //asocia con otro elemento el cual puede ser: #método(); clase#método(); paquete#método(); paquete.clase#método(). @throws clase descripcion @version versión

  35. Javadoc La documentación se crea de la siguiente forma: javadoc archivo.java En NetBeans se puede encontrar la opción en el menú Build en la opción Generate JavaDocfor … Se recomienda realizar tanto el código como las clases en inglés.

  36. Javadoc /** * Thrown to indicate that the application has attempted to convert * a string to one of the numeric types, but that the string does not * have the appropriate format. * * @author unascribed * @version 1.16, 02/02/00 * @see java.lang.Integer#toString()

  37. Javadoc * @since JDK1.0 */ public class NumberFormatException extends IllegalArgumentException { /** * Constructs a <code> NumberFormatException </code> with no detail message. */ public NumberFormatException () { super(); }

  38. Javadoc /** * Constructs a <code> NumberFormatException </code> with the * specified detail message. * @param s the detail message. */ public NumberFormatException (String s) { super (s); } }

  39. Ofuscación La ofuscación es una técnica avanzada de refactorización que permite a un código mantenerle obscuro (es decir no muy legible) con diversos propósitos de optimización. ¿Para que se hace ofuscación? ¿No viola esto el principio de claridad en la implantación?

  40. Ofuscación La ofuscación se realiza en muchas casos para hacer un código ilegible, también en muchos casos se puede reducir el tamaño del código fuente y del código binario realizado. Al realizar cualquier tipo de programa se puede aplicar técnicas de reingeniería como la ingeniería inversa para de un código binario tratar de obtener su código fuente.

  41. Ofuscación En mucho tipos de aplicaciones como las aplicaciones móviles se ofusca el código objeto generado para obtener un código más pequeño. Un programa puede ser fácilmente decompilable, por este motivo se ofusca con la premisa de que si esto llegará ocurrir, el que lo hiciera le costaría mucho trabajo entender el programa y modificarlo.

  42. Ofuscación En el caso de programas ejecutables (.exe) es mucho más difícil obtener un código en lenguaje de alto nivel, dado que el proceso de decompilación deja sus resultados en ensamblador y por lo tanto es necesario saber como el compilador ensambla cada línea de código. Por este motivo muchas empresas grandes del sector informático realizan sus proyectos en sus propios compiladores.

  43. Ofuscación Actualmente la ofuscación se emplea más en la ofuscación de código dinámico, dado que aquí es muy importante tanto el tamaño del código como la legibilidad de este, tal es el caso de HTML. La ofuscación si bien es cierto viola principios de buena prácticas de Ing. de Software, se realiza con un propósito específico hasta el final del proceso.

  44. Ofuscación En algunos casos la ofuscación se logra simplemente refactorizando el nombre de las variables pero en muchos casos esto no sirve. Para lograr la ofuscación se deberá modificar el flujo del programa de tal forma que menos instrucciones o en algunos casos más instrucciones deben de realizar el mismo programa.

  45. Ofuscación En algunos casos resulta que ofuscar el código puede ser que el tamaño del código fuente y del programa aumente, debido a que es común que las variables tengan nombres muy grandes o bien se incluyan instrucciones extras, se descompongan ciclos, se cambien y mapeen estructuras, etc. Existen concursos de ofuscación de código

  46. Ofuscación

  47. Sockets Java Java es un lenguaje multiplataforma que al igual que otros lenguajes de programación tiene APIs para la comunicación de procesos remotos. La ventaja de utilizar sockets en Java con respecto a su contraparte en C, radica en que Java enmascara la complejidad de los procesos en clases más simples.

  48. Sockets Java • Para utilizar sockets y clases similares se necesita utilizar el paquete java.net.*; • Se pueden utilizar clases específicas para conectarse a servicios de red determinados como http, ftp, entre otros. //Servidor usando sockets stream ServerSocket ss = new ServerSocket(5000, 100);

  49. Servidor Stream Socket con = ss.accept(); OutputStream sal = con.getOutputStream(); String s = new String(“ITMorelia\n”); for(int i=0; i < s.length(); i++) sal.write((int) s.charAt(i)); Conection.close();

  50. Cliente stream Socket c = new Socket(InetAddress.getLocalHost(), 5000); InputStream entrada = c.getInputStream(); char c; while((c = (char) entrada.read()) != ‘\n’) System.out.println(String.valueOf(c));

More Related