{"id":20,"date":"2011-10-13T15:57:16","date_gmt":"2011-10-13T15:57:16","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/lconstan\/?p=20"},"modified":"2011-10-13T15:57:16","modified_gmt":"2011-10-13T15:57:16","slug":"poo","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/lconstan\/2011\/10\/13\/poo\/","title":{"rendered":"Conceptos de Programaci\u00f3n Orientada a Objetos"},"content":{"rendered":"<p><strong>Conceptos fundamentales<\/strong><\/p>\n<ul>\n<li><strong>Clase<\/strong>: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciaci\u00f3n es la lectura de estas definiciones y la creaci\u00f3n de un objeto a partir de ellas.<\/li>\n<\/ul>\n<ul>\n<li><strong>Herencia<\/strong>: (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\u00e9todos y variables publicas declaradas en C. Los componentes registrados como \"privados\" (private) tambi\u00e9n se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y s\u00f3lo pueden ser accedidos a trav\u00e9s de otros m\u00e9todos p\u00fablicos. Esto es as\u00ed para mantener hegem\u00f3nico el ideal de OOP.<\/li>\n<\/ul>\n<ul>\n<li><strong>Objeto<\/strong>: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (m\u00e9todos) 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.<\/li>\n<\/ul>\n<ul>\n<li><strong>M\u00e9todo<\/strong>: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecuci\u00f3n se desencadena tras la recepci\u00f3n de un \"mensaje\". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un m\u00e9todo puede producir un cambio en las propiedades del objeto, o la generaci\u00f3n de un \"evento\" con un nuevo mensaje para otro objeto del sistema.<\/li>\n<\/ul>\n<ul>\n<li><strong>Evento<\/strong>: Es un suceso en el sistema (tal como una interacci\u00f3n del usuario con la m\u00e1quina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. Tambi\u00e9n se puede definir como evento, a la reacci\u00f3n que puede desencadenar un objeto, es decir la acci\u00f3n que genera.<\/li>\n<\/ul>\n<ul>\n<li><strong>Propiedad o atributo<\/strong>: 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\u00edsticas predeterminadas, y cuyo valor puede ser alterado por la ejecuci\u00f3n de alg\u00fan m\u00e9todo.<\/li>\n<li><strong>Operaci\u00f3n:<\/strong> En programaci\u00f3n, un programa realiza una operaci\u00f3n normalmente especificada como parte de una instrucci\u00f3n, que es realizada por la computadora. Compuertas l\u00f3gicas como And, Or y Not son tambi\u00e9n operaciones.<\/li>\n<\/ul>\n<p><strong>Caracter\u00edsticas de la POO<\/strong><\/p>\n<ul>\n<li><strong>Abstracci\u00f3n<\/strong>: denota las caracter\u00edsticas 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\u00f3mo se implementan estas caracter\u00edsticas. Los procesos, las funciones o los m\u00e9todos pueden tambi\u00e9n ser abstra\u00eddos y cuando lo est\u00e1n, una variedad de t\u00e9cnicas son requeridas para ampliar una abstracci\u00f3n.El proceso de abstracci\u00f3n permite seleccionar las caracter\u00edsticas relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracci\u00f3n es clave en el proceso de an\u00e1lisis y dise\u00f1o 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.<\/li>\n<\/ul>\n<ul>\n<li><strong>Encapsulamiento<\/strong>: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracci\u00f3n. Esto permite aumentar la cohesi\u00f3n de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultaci\u00f3n, principalmente porque se suelen emplear conjuntamente.<\/li>\n<\/ul>\n<ul>\n<li><strong>Polimorfismo<\/strong>:  comportamientos diferentes, asociados a objetos distintos, pueden  compartir el mismo nombre, al llamarlos por ese nombre se utilizar\u00e1 el  comportamiento correspondiente al objeto que se est\u00e9 usando. O dicho de  otro modo, las referencias y las colecciones de objetos pueden contener  objetos de diferentes tipos, y la invocaci\u00f3n de un comportamiento en una  referencia producir\u00e1 el comportamiento correcto para el tipo real del  objeto referenciado. Cuando esto ocurre en \"tiempo de ejecuci\u00f3n\", esta  \u00faltima caracter\u00edstica se llama <em>asignaci\u00f3n tard\u00eda<\/em> o <em>asignaci\u00f3n din\u00e1mica<\/em>.  Algunos lenguajes proporcionan medios m\u00e1s est\u00e1ticos (en \"tiempo de  compilaci\u00f3n\") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.<\/li>\n<li><strong>Herencia<\/strong>:  las clases no est\u00e1n aisladas, sino que se relacionan entre s\u00ed, formando  una jerarqu\u00eda de clasificaci\u00f3n. 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 <em>clases<\/em> y estas en <em>\u00e1rboles<\/em> o <em>enrejados<\/em> que reflejan un comportamiento com\u00fan. Cuando un objeto hereda de m\u00e1s de una clase se dice que hay <em>herencia m\u00faltiple<\/em>.<\/li>\n<li><strong>Sobrecarga:<\/strong>Algunos m\u00e9todos en una clase pueden tener el mismo nombre. Estos m\u00e9todos  deben contar con diferentes argumentos. El compilador decide qu\u00e9 m\u00e9todo  invocar comparando los argumentos. Se generara un error si los m\u00e9todos  s\u00f3lo var\u00edan en el tipo de retorno.<\/li>\n<li><strong>Constructor: <\/strong> El objetivo del constructor es el de inicializar un objeto cuando \u00e9ste es creado. Asignaremos los valores iniciales as\u00ed como los procesos que \u00e9sta clase deba realizar. Se utiliza para crear tablas de m\u00e9todos virtuales y poder as\u00ed desarrollar el polimorfismo, una de las herramientas de la programaci\u00f3n 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\u00e9ntesis.<\/li>\n<\/ul>\n<ul>\n<li><strong>Constructor por defecto:<\/strong>Un constructor por defecto es un constructor sin par\u00e1metros que no  hace nada. Sin embargo ser\u00e1 invocado cada vez que se construya un objeto  sin especificar ning\u00fan argumento, en cuyo caso el objeto ser\u00e1 iniciado  con los valores predeterminados por el sistema (los atributos num\u00e9ricos a ceros, los alfanum\u00e9ricos a nulos, y las referencias a objetos a <code>null<\/code>).<\/li>\n<li><strong>Firmas de metodos:<\/strong> Los m\u00e9todos se declaran en una clase o struct mediante la especificaci\u00f3n del nivel de acceso como public o private, modificadores opcionales como abstract o sealed, el valor devuelto, el nombre del m\u00e9todo y cualquier par\u00e1metro de m\u00e9todo.  Todos esos elementos constituyen la firma del m\u00e9todo.<\/li>\n<li><strong>Clases Abstractas:<\/strong> Este Tipo de Clases nos permiten crear  \u201cm\u00e9todo generales\u201d, que recrean un comportamiento com\u00fan, pero sin  especificar c\u00f3mo lo hacen. A nivel de\u00a0 c\u00f3digo tienen por particularidad  que algunos de sus m\u00e9todos no tienen \u201ccuerpo de  declaraci\u00f3n\u201d, \u00bfqu\u00e9 quiere decir esto? no tienen las llaves { } ni c\u00f3digo  dentro de ellos y deben estar precedidos por la palabra clave abstract. Si una clases contiene uno o m\u00e1s m\u00e9todos abstractos est\u00e1 clase debe ser abstracta. Estas clases como son generalidades no pueden ser  instanciadas por ning\u00fan objeto (se dice que su nivel de abstracci\u00f3n es  demasiado alto), entonces su \u00fanico fin es ser heredado\/extendido por  otras clases.<\/li>\n<li><strong>Interfaces:<\/strong> Las interfaces, tal como las clases abstractas. no se pueden instanciar. Sus m\u00e9todos deben ser re-escritos por la clase que implemente. \u00bfy para qu\u00e9 hay interfaces, si hacen \u201ccasi\u201d lo mismo que las clases abstractas? veamos el porqu\u00e9. Java, asi como la mayor\u00eda de los lenguajes orientados a objetos, no  permite la herencia m\u00faltiple (tipo grafo), pero bueno si la herencia  jerarquica o de tipo \u00e1rbol no es suficiente para modelar nuestro  problema podemos valernos de la herencia y las interfaces.Una sub-clase puede heredar de s\u00f3lo <strong>UNA<\/strong> Super-Clase pero puede implementar varias interfaces<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Conceptos fundamentales Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciaci\u00f3n es la lectura de estas definiciones y la creaci\u00f3n 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 [&hellip;]<\/p>\n","protected":false},"author":6793,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[296],"tags":[],"class_list":["post-20","post","type-post","status-publish","format-standard","hentry","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/posts\/20","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/users\/6793"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/comments?post=20"}],"version-history":[{"count":6,"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/posts\/20\/revisions"}],"predecessor-version":[{"id":26,"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/posts\/20\/revisions\/26"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/media?parent=20"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/categories?post=20"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/lconstan\/wp-json\/wp\/v2\/tags?post=20"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}