viernes, 22 de abril de 2016

Articulo Científico: Características de Programación Orientada a Objetos

Introducción


En este artículo se mencionaran algunos de los aspectos más fundamentales de la programación moderna/Declarativa, tales como clases, objetos, herencia entre otros que se definirán y explicaran en el artículo, para continuar se definirá lo que se llama Paradigma en su origen significaba un ejemplo ilustrativo, en particular enunciado modelo que mostraba todas las inflexiones de una palabra. En el libro The Structure of Scientific Revolutions, el historiador Thomas Kuhn describía un paradigma como un conjunto de teorías, estándares y métodos que juntos representan un medio de organización del conocimiento: es decir, un medio de visualizar el mundo.
Se mencionó anteriormente la palabra declarativa haciendo referencia a al paradigma Declarativo ya que es este de donde se obtiene los diferentes elementos que contendrá este artículo. El declarativo es un tipo de programación en el cual es programador escribe el algoritmo que resuelve un problema determinado, asease le digo que hacer y cómo hacerlo, de aquí nace el paradigma Orientado a objetos la orientación a objetos puede describirse como el conjunto de disciplinas (ingeniería) que desarrollan y modelizan software que facilitan la construcción de sistemas complejos a partir de componentes.

Palabras clave: Orientada a objetos, clases, herencia, interfaces

  

Clases
Una  clase, es simplemente una abstracción que hacemos de nuestra experiencia sensible. El ser humano tiende a agrupar seres o cosas  -objetos-con características similares en grupos  -clases-. Así, aun cuando existen por ejemplo multitud de vasos diferentes, podemos reconocer un vaso en cuanto lo
Vemos, incluso aun cuando ese modelo concreto de vaso no lo hayamos visto nunca.
(Introducción a la OOP. Versión 1.0. Autor: Francisco Morero)


Una clase  contiene toda la información que se necesita para crear y dar forma a los objetos ya que estos se verán afectados en su comportamiento gracias a las cualidades que su clase contenga, la clase permite encapsular bajo un mismo nombre los métodos y propiedades que serán manipulados en el objeto

 A partir del concepto de clase podemos decir que un objeto es una instancia de una clase, para que se entienda de una mejor manera el concepto, visualice  a la clase como un molde, y al objeto como el resultado de este molde, cada característica que el modelo posea afectara  todo objeto que se cree de esa clase.

Al momento de hablar de comportamiento de un objeto vemos que este concepto está dado por la clase, ya que el hecho que los objetos pertenezcan a una clase , se hace con el objetivo de que tenga un comportamiento similar para el uso de su información.

 




Objeto
Un objeto es una agrupación de código, compuesta de propiedades y métodos, que pueden ser manipulados como una entidad independiente. Las propiedades definen los datos o información del objeto, permitiendo consultar o modificar su estado; mientras que los métodos son las rutinas que definen su comportamiento
(Duarte H. Material para la clase Programación Orientada a Objetos.)

Como se mencionó anteriormente, una clase es era una agrupación de código, es normal que el objeto sea un medio para manejar la información agrupada y esto se logra mediante las propiedades y métodos que su clase le ha impregnado, las propiedades contendrán la información  y los métodos el comportamiento o la forma de hacer ciertas manipulaciones sobre la información.


A pesar que cada objeto es generado de una misma clase base, cada objeto será único, ya que contendrá información distinta a otro objeto, aunque sean de la misma clase, piense en una imagen hecha con cerámica, aunque todas son cerámicas cada una contiene elementos diferentes que hacen una sola imagen al estar juntas.





Herencia
La herencia es una de las características más importantes de la programación actual y del paradigma POO ya que esta cualidad nos permite la reutilización  de código, nos ahorra no solo tiempo sino la depuración de errores, es gracia a este criterio que muchos lo ponen como una característica indispensable en un lenguaje que se haga llamar orientado a objetos, este caso solo mencionare la herencia simple.
(Autor: Francisco Morero)

Este tipo de herencia simple es en la que solo se hereda de una superclase, al heredar, la clase toma directamente el comportamiento de su superclase pero claro esta pude ser derivada de otra y de otra clase, se heredan todas aquellas propiedades y métodos que se permitan, esto se logra gracias a un cierto tipo de palabras reservadas, Private esta palabra india que no se heredará , ya que se puede hacer que solo se hereden ciertas características.

Lo más común al heredar es que se agreguen características nuevas a la clase que está heredando porque si no es así  sería mejor solo implementar la superclase, al heredar se hace lo que se conoce como una sobre escritura de métodos, es muy poco probable que lo que se modifique sean datos.   




Métodos
Los  métodos  describen  el  comportamiento  asociado  a  un  objeto, representan las acciones que pueden realizarse por un objeto o sobre un  objeto,  la  ejecución  de  un  método  puede  conducir  a  cambiar  el estado del objeto o dato local del objeto. en la POO el cuerpo de un método consta de un bloque de código procedimental que ejecuta la acción  requerida,  todos  los  métodos  que  alteran  o  acceden  a  los datos de un objeto se define dentro del objeto, Un método dentro de un objeto se activa  por un mensaje que se envía por otro objeto al objeto que contiene el método
(Duarte H. Material para la clase Programación Orientada a Objetos.)


Se puede entender un método como una sentencia de código que tiene o tendrá un efecto sobre el objeto que se relacione con dicho método, este método tendrá efectos sobre la información que el objeto contenga o sobre el objeto en general
Por lo general estos métodos se necesitan de un parámetro para ejecutarce, cabe mencionar que están los métodos tipo VOID  cuya activación no requiere mensaje o parámetro.

Existen diferentes tipos de métodos:
1.    Inicializadores
2.    Getters
3.    Setters
4.    Constructores
5.    Destructores

Cabe resaltar que el constructor es el más importante de estos métodos, ya que este es el encargado de la inicialización del objeto en cuanto es creado, de ahí el nombre de constructor, él toma cada propiedad del objeto y le da una instancia , también el constructor lleva el mismo nombre de la clase en la que reside.
Los  métodos get y set son utilizados para obtener información de una variable, esto ayuda a ser más natural al momento de programar y le método set es el que modifica el valor de una variable.



Propiedades

Todo objeto puede tener cierto número de propiedades, cada una de las cuales tendrá, a su vez, uno o varios valores. Las propiedades corresponden a las clásicas "variables" de la programación estructurada ya que esta se utiliza en información ya clasificada. Son, por lo tanto, datos encapsulados dentro del objeto, junto con los métodos y las relaciones. Las propiedades de un objeto pueden tener un valor único o pueden contener un conjunto de valores más o menos estructurados (matrices, vectores, listas, etc.).
( Scott M (2006). Programming Languages Pragmatics)


Además, los valores pueden ser de cualquier tipo (numérico, alfabético, u otro variable primitiva.) si el sistema de programación lo permite. Los atributos están asociados a clases y objetos, y describen la clase o el objeto de alguna manera. Las entidades de la vida real están a menudo descritas con palabras que indican características estables. La mayoría de los objetos físicos tienen características tales como forma, peso, color y tipo de material. Las personas tienen características como fecha de nacimiento, padres, nombre y color de los ojos.

Una característica puede verse como una relación binaria entre una clase y cierto dominio. Los atributos describen el estado del objeto. Un atributo consta de  dos partes: un nombre de atributo y un valor de atributo. En la mayoría de los casos, un dominio el posible conjunto de valores que una variable puede llegar a tener.

Las propiedades pueden ser heredadas o propias


Miembros estáticos
Metodos:
Una clase estática es básicamente igual que una clase no estática, pero existe una diferencia: no se pueden crear instancias de una clase estática.  En otras palabras, no puede utilizar la palabra clave new para crear una variable del tipo clase.  
(https://msdn.microsoft.com/es-es/library/79b3xss3.aspx)

Dado que no hay ninguna variable de instancia, el acceso a los miembros de una clase estática se realiza mediante el propio nombre de clase.  Por ejemplo, si cuenta con una clase estática que se denomina MATH dentro del cual esta una función llamada sqrt().

Las clases estáticas son de tipo sellado y, por consiguiente, no pueden heredarse.  No pueden heredar de cualquier clase, excepto Object ya que de esta clase heredan todas las demás clases que creemos por forma automática.  Las clases estáticas no pueden contener un constructor de instancia, recordando que al declarar un método o una propiedad estática esta lo que hace es reservar de forma permanente un espacio en memoria, para poder así almacenar su valor fijo.

  Propiedades:

Las variables estáticas en php es una variable con un dato inicial ya establecido, en php no se puede acceder a este tipo de variables con el operando (->). y su valor es estático (es decir, no puede variar ni ser modificado). Ésta, se define anteponiendo la palabra clave static al nombre de la variable.




                                   
Clases Abstractas
Una clase abstracta es aquella que construimos para derivar de ella otras clases, pero de la que no se puede  instanciar. Por  ejemplo: la clase mamífero, no existe como tal en la naturaleza, no existe ningún ser que sea tan solo  mamífero (no hay ninguna instanciación directa de esa clase), existen humanos, gatos, conejos, etc.
Todos ellos son mamíferos, pero no existe un animal que sea solo mamífero.
(Introducción a la OOP. Versión 1.0.0 – Autor: Francisco Morero)

Las clases abstractas nos permiten jerarquizar de una mejor manera, ya que esta clase nos permite generar métodos generales, para darle forma a proyectos que son modulares y grandes, ya que propagan un comportamiento en común, solo diciendo el nombre y no como hacerlo, por esto es que las clases que lo heredan, están en la obligación de sobrescribir dicho método, ya que el que es de la clase abstracta no tiene “cuerpo” declarado .Si una clases contiene uno o más métodos abstractos está clase debe ser abstracta.

Del mismo modo la clase que se halla al inicio de la jerarquía de clases, normalmente es creada para que contenga aquellos datos y métodos comunes a todas las clases que se le derivan, estas son clases abstractas.  


Como podemos apreciar en esta imagen , la clase caballo sería una clase abstracta, ya que son las demás clases de caballos la que la implementan, usando esto como un formato a seguir , cabe mencionar que las clases que heredan de una clase abstracta están obligados a sobrescribir los métodos que se requieren.



Excepciones
Es un evento que ocurre durante la ejecución de un programa y que interrumpe el flujo normal de operación, es decir en el momento en el que ocurre algo que esta fuera de las manos del programador , como por ejemplo un  error al conectarse a la red y que no haya servicio de internet o algo por el estilo, entre  las que más me han dado problema es la NullPointerException! .


Existen muchos tipos de excepciones, casi una por cada tipo de error, por lo que si tenemos error de entrada/salida de datos, el programa debería de lanzar una excepción de tipo IOException esta se usa de ejemplo ya que es de las más comunes.
Tipos de excepciones:
         Implícitas.
-                                                         Definidas por el lenguaje
  Explícitas.
-                                                         Definidas por el programador

Como manejarlas
·         Debe ser simple de usar y de entender
·         Debe separar el código del tratamiento de excepciones del código normal
·         Implementar un tratamiento uniforme de las excepciones
·         Permitir que las acciones de recuperación sean programadas
Si se desea que la aplicación siga ejecutándose después del error, entonces se usa:
 Try: para poner en alerta al programa sobre el código que puede lanzar una excepción.
 Catch: para capturar y manejar cada excepción que se lance.
 Finally: código que se ejecutará haya o no excepciones.








Conclusiones:
  • Hay muchas características que hacen de la programación orientad a objetos una de las más fuertes en el día de hoy, sin embargo seguirá evolucionando según pase el tiempo y adaptándose a los cambios y necesidades que vayan surgiendo en el camino.

  • La programación orientada a objetos permite la optimización del código generado gracias a que mediante técnicas de herencia, atributos estáticos entre otros permiten, que el código sea genérico de manera que sea reutilizable, ahorrando  el tiempo y errores en el tiempo de compilación.

  • Resolver un problema bajo el paradigma de la programación orientada a objetos implica determinar  una jerarquía  y caracterizar los diferentes objetos que intervienen en el problema, para poder relacionarlos de la forma correcta.




Referencias
Lista de Referencias

[1] Scott M (2006). Programming Languages Pragmatics

[2] https://msdn.microsoft.com/es-es/library/79b3xss3.aspx 
 [3] Aguilar L. J (1996). Conceptos fundamentales de programación orientada a objetos. En J. Domínguez (Ed.) Programación Orientada a Objetos (pp 66 – 111). España: McGraw-Hill.

[4] Schuerer K. , Maufrais C, Letondal C, Deveaud E, & Petit M (2008). Introduction to
Programming using Python Programming Course for Biologists at the Pasteur Institute .Extraído el 15 de Septiembre de 2010 desde 
http://www.pasteur.fr/formation/infobio/python/support.pdf

 [5] Eiffel (programming language). (2010, 25 de agosto). In Wikipedia, The Free Encyclopedia. Recuperado 06:31, agosto 31, 2010 de http://en.wikipedia.org/w/index.php?
title=Eiffel_(programming_language)&oldid=380870822

[6] Duarte H. Material para la clase Programación Orientada a Objetos.

No hay comentarios:

Publicar un comentario