Conceptos de Programación Orientada a Objetos

octubre 13th, 2011

Conceptos fundamentales

  • Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.
  • Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.
  • Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.
  • Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.
  • Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.
  • Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.
  • Operación: En programación, un programa realiza una operación normalmente especificada como parte de una instrucción, que es realizada por la computadora. Compuertas lógicas como And, Or y Not son también operaciones.

Características de la POO

  • Abstracción: denota las características esenciales de un objeto, donde se capturan sus comportamientos.Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.
  • Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
  • Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.
  • Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.
  • Sobrecarga:Algunos métodos en una clase pueden tener el mismo nombre. Estos métodos deben contar con diferentes argumentos. El compilador decide qué método invocar comparando los argumentos. Se generara un error si los métodos sólo varían en el tipo de retorno.
  • Constructor: El objetivo del constructor es el de inicializar un objeto cuando éste es creado. Asignaremos los valores iniciales así como los procesos que ésta clase deba realizar. Se utiliza para crear tablas de métodos virtuales y poder así desarrollar el polimorfismo, una de las herramientas de la programación orientada a objetos (POO). Al utilizar un constructor, el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis.
  • Constructor por defecto:Un constructor por defecto es un constructor sin parámetros que no hace nada. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los atributos numéricos a ceros, los alfanuméricos a nulos, y las referencias a objetos a null).
  • Firmas de metodos: Los métodos se declaran en una clase o struct mediante la especificación del nivel de acceso como public o private, modificadores opcionales como abstract o sealed, el valor devuelto, el nombre del método y cualquier parámetro de método. Todos esos elementos constituyen la firma del método.
  • Clases Abstractas: Este Tipo de Clases nos permiten crear “método generales”, que recrean un comportamiento común, pero sin especificar cómo lo hacen. A nivel de  código tienen por particularidad que algunos de sus métodos no tienen “cuerpo de declaración”, ¿qué quiere decir esto? no tienen las llaves { } ni código dentro de ellos y deben estar precedidos por la palabra clave abstract. Si una clases contiene uno o más métodos abstractos está clase debe ser abstracta. Estas clases como son generalidades no pueden ser instanciadas por ningún objeto (se dice que su nivel de abstracción es demasiado alto), entonces su único fin es ser heredado/extendido por otras clases.
  • Interfaces: Las interfaces, tal como las clases abstractas. no se pueden instanciar. Sus métodos deben ser re-escritos por la clase que implemente. ¿y para qué hay interfaces, si hacen “casi” lo mismo que las clases abstractas? veamos el porqué. Java, asi como la mayoría de los lenguajes orientados a objetos, no permite la herencia múltiple (tipo grafo), pero bueno si la herencia jerarquica o de tipo árbol no es suficiente para modelar nuestro problema podemos valernos de la herencia y las interfaces.Una sub-clase puede heredar de sólo UNA Super-Clase pero puede implementar varias interfaces

Mi primer aplicación Android

septiembre 13th, 2011

Mi experiencia desde cero (0) hasta lograr mi primer Hola Mundo para Android.

Inicialmente estaba un poco temeroso, pero a medida que comencé a investigar y al ir encontrando información muy valiosa mi perspectiva cambio.

He tenido que bajarme eclipse 3.5, JDK 1.6 y el SDK r12 para Android, antes de instalar el SDK r12 para Android tuve que instalar el JDK 1.6, luego eclipse y por último el plugin ADT para Eclipse.

Una vez instalado los pre requisitos, procedí a instalar el SDK de Android, en este punto  actualice el SDK y la API, para lo cual el SDK Manager  me permite actualizar con todas las versiones de SDK y API lo que me provoco que la instalación se demorara demasiado, cancele  esta opción y  busque la pestaña de paquetes disponibles y seleccione la última versión del SDK y de la API dentro del repositorio de Android y mande a instalar ésta selección lo cual fue más rápido.

Una vez hecho esto me fui a eclipse a configurar la ubicación del SDK para Android y lo hice especificando la ruta completa "C:\Archivos de programa\Android\android-sdk".

Luego de esto procedí a crear mi primer proyecto Android, cambie el nombre la aplicación y el mensaje a mostrar dentro del código autogenerado y lo mande a ejecutar, hasta aquí todo parecía que iba a ejecutarse, cuando me salió un error que decía que debía especificar un dispositivo virtual, tuve que ingresar al manager SDK y crearlo con un nombre especifico (foo) que pedía la aplicación autogenerado. Una vez hecho esto volví a ejecutar la aplicación, pero ahora me salía otro error que no encontraba el dispositivo virtual, como era posible si ya lo había creado... bueno investigando el error en internet encontré que tenía que cambiarle el nombre a la ruta del SDK en las preferencias de eclipse y la ruta completa que especifique anteriormente cambiarla por "C:\Archiv~1\Android\android-sdk". Una vez hecho este cambio volví a ejecutar y en este momento se cargó el emulador aunque demoro algunos minutos pero en definitiva salió la aplicación Hola Mundo.

Esta ha sido una excelente experiencia en los primero pasos con aplicaciones para dispositivos móviles, en este caso con sistema operativo Android.