
Programacion Orientada a Objetos: es un metodo de desarrollo de software basado en el comportamiento de los objetos en el mundo real.
Es lo que se conoce como un paradigma o modelo de la programacion. Esto significa que no es un lenguaje especifico, o una tecnoligia, sino una forma de programar, una manera de plantearse la programacion.
No es la unica (o necesariamente mejor o peor que otras), pero se ha contituido en una de las formas de programar mas populares e incluso mucho de los lenguajes que usamos hoy día lo soportan o estan diseñados bajo ese modelo.
Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en terminos de objetos, propiedades, metodos y otros conceptos mas.
Los objetos ABAP son un conjunto de sentencias orientadas a objetos que han sido introducidas dentro del lenguaje ABAP a partir de la version 4.0. Esta extension se basa en el lenguaje ya existente, siendo compatible con el.
Se pueden usar objetos en programas existentes, de la misma manera que se pueden usar sentencias ABAP convencionales en programas ABAP orientados a objetos.
Los conceptos de orientacion a objetos de los Objetos ABAP son esencialmente los mismos de otros lenguajes modernos orientados a objetos tales como C++ o Java.
Un pequeño numero de conceptos que han probado no ser provechosos en estos lenguajes no se incluyeron en los objetos ABAP.
Por otro lado, los objetos ABAP tambien tienen elementos muy utiles del lenguaje que C y Java no ofrecen.
Los origenes de la POO: En una primera etapa surgen los lenguajes ensambladores en donde la unidad de programacion es la instruccion compuesta de un operador y los operando. aqui el nivel de abstraccion que se aplica es muy bajo.
En una segunda etapa surgen los lenguajes de programacion FORTRAN, ALGOL y COGOL en donde los objetos de operaciones del mundo real se podian modelar mediante datos y estructuras de control separadamente. en esta etapa el diseño del software se enfoca sobre la representacion del detalle procedimental y en funcion del lenguaje elegido.
Conceptos como refinamiento progresivo, modularidad, procedimiento y programacion estructurada, son conceptos basicos que se utilizan en esta etapa. Aqui existe una mayor abstraccion de los datos.
En una tercera etapa se introducen los conceptos de Abstraccion y ocultacion de la informacion.
Y en una cuarta etapa a partir de los años 70 se trabaja sobre una nueva clase de lenguajes de simulacion y sobre la contruccion de prototipos tales como Simula70 y basado en este el lenguaje Smoltock, en estos lenguajes la abstraccion de datos tiene una gran importancia y los problemas del mundo real, se representan mediante objetos de datos a los cuales se añade el correspondiente conjunto de operaciones asociados a ellos, terminos como Abstraccion de datos, objeto, encapsulacion entre otros son conceptos basicos sobre se fundamente la POO.
Conceptos Claves:
Objeto: es unicamente una porcion de codigo fuente que contiene datos y proporciona servicios.
Los objetos en programacion se usan para modelar objetos o entidades del mundo real (el objeto hijo, madre, o farmaceutica, por ejemplo).
Un objeto es, por tanto, la representacion en un programa de concepto y contiene toda la informacion necesaria para abstraerlo: datos que describen sus atributos y operaciones que pueden realizarse sobre los mismos.
Los datos constituyen los atributos del objeto. Los servicios que proporciona el objeto se conocen como metodos y se asemejan en su funcionamiento a las funciones. Normalmente los metodos operan con los datos privados del objeto, esto es, con datos que son solo visibles para los metodos del objeto.
De esta manera, los atributos de un objeto no pueden ser cambiados directamente por el usario del objeto, solo puden ser cambiados por los metodos de ese objeto. Asi se garantiza la consistencia interna del objeto.
Clase: es un conjunto de objetos que tienen la misma estructura y comportamiento.
La clasificacion es algo que hacemos todos los dias, a cada momento (entre otras cosas, nos libra de utilizar medias como guantes o bañarnos en el comedor en vez de la ducha). Cada vez que decimos que algo es alguna cosa, estamos clasificandolo, asociandolo a una clase.
En la POO una clase no es mas que una serie de codigo que define a todos los elementos relacionados con ella.
Las caracteristicas de este objeto se llaman en lenguaje de programadores Atributos.
A los mecanismos especificos se llaman Metodos.
Y las reacciones a ciertos sucesos seran llamados Eventos.
Instancia: es un objeto de una clase en particular creado en tiempo de ejecucion.
Una clase simboliza la definicion de un objeto, pero no solo es el objeto en si, del modo como una idea no es una cosa fisica. Asi que para sentarnos necesitaremos convertir esa idea en algo, un objeto real; a ese objeto lo llamamos instancia.
Cada vez que creamos una nueva instancia, esta adquiere atributos, metodos y eventos de la clase a la que pertenece, sin embargom cada instancia es independiente de las otras; esto nos da dos ventajas:
Si hago algun cambio en la clase, todas las instancias de esta clase se actualizaran automaticamente; esto nos permite hacer cambios sin tener que ir a cada una de las instancias.
Al ser independientes de las otras instancias, puedo darles valores diferentes sin que afecten a las demas (como tener una silla negra, una roja, una mas alta) Aunque comparten la misma estructura, pueden programarse individualmente, dando versatilidad y flexibilidad al codigo.
Principales ventajas de la orientacion a Objetos:
Sistemas de software muy complekps se vuelven mucho mas simples de comprender debido a que la orientacion a objetos proporciona una representacion mucho mas cercana de la realidad que otras tecnicas de programacion.
En un sistema correctamente diseñado con orientacion a objetos es posible realizar cambios al nivel de las clases, sin tener que realizar cambios en ningun otro punto del sistema. Esto reduce significativamente el costo total del mantenimiento necesario.
A traves del polimorfismo y la herencia es posible la reutilizacion de componentes individuales.
Polimorfismo: Es una propiedad que presentan los objetos y que significa que metodos que se llaman exactamente igual pueden comportarse de manera distinta en clases diferentes. Es la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en funcion a los parametros usados durante su invocacion.
Herencia: Una de las propiedaddes mas importantes que presenta la POO es la Herencia. Es la capacidad que tienen una clase de heredar las propiedaddes y metodos de otra clase. La herencia nos permite crear una nueva clase a partir de una existente, heredando la nueva clase sus propiedades y atributos.
Existen 2 tipos de Herencias Simple: donde una clase solo puede heredar de una clase base y de ninguna otra. Herencia multiple: en donde una clase puede heredar las caracteristicas de varias clases, es decir, puede tener varios padres. En este aspecto hay discrepancias entre los diseñadores de lenguajes. Algunos de ellos han preferido no admitir la herencia múltiple debido a que los potenciales conflictos entre métodos y variables con igual nombre, y eventualmente con comportamientos diferentes crea un desajuste cognitivo que va en contra de los principio de la programación orientada a objetos. Por ello, la mayoría de los lenguajes orientados a objetos admite herencia simple. En contraste, algunos pocos lenguajes admiten herencia múltiple, entre ellos: C++, Python, Eiffel, mientras que Smalltalk, Java, Ada y C# sólo permiten herencia simple. ABAP no admite herencia múltiple.
La cantidad de trabajo en revision y mantenimiento del sistema se reduce debido a que muchos problemas pueden ser detectados y corregidos en la fase de diseño.
Facilita el trabajo en equipo debido a que varios desarolladores pueden trabajar en distintos componentes de un mismo desarrollo.
a pesar que las ventajas de la POO superan a sus limitaciones se pueden encontrar caracteristicas negativas:
Limitacion para el programador a pesar que la tecnologia OO no es nueva, los programadores no estan familiarizados con los conceptos de dicha tecnologia, en otras palabras la logica de la programacion estructurada sigue siendo predominante en la mayoria de los desarolladores de software. En esta se requiere una logica de pensamiento totalmente diferente a la logica comummente utilizada para la programacion estructurada.
Tamaño excesivo en las aplicaciones resultantes, la gran mayoria de los equipos de computos cuentan con capacidades tanto de almacenamiento como de memoria lo suficientemente buena como para ejecutar la mayoria de las aplicaciones que pueden desarrollarse con la tecnologia OO, sin embargo existen casos en los que lo anterior no se cumple.
Cuando se heredan clases a partir de clases existentes, se heredan de forma implicita todos los miembros de dicha clase aun cuando no todos se necesitan, lo que quiere decir que hayan aplicaciones muy grandes que no siempre encajan en los sitemas que se disponen
Velocidad de ejecucion relacionado al punto anterior ya que una aplicacion pesada es mas lenta de ejecutar que una aplicacion conformada unicamente por los modulos necesarios.
Como se piensa en la POO: asumiendo el modelado de un coche con POO. El coche seria el objeto, las propiedades serian las caracteristicas y los metodos ser