objetos está presente tanto en el diseño como en la codificación Flexibilidad: Cualquier cambio se ve reflejado en cualquier lugar donde aparecen los datos involucrados. Objetivismo: representa el mundo real. Reusabilidad: permite utilizar una clase definida previamente en aplicaciones que nos sea conveniente. Mantenibilidad: las clases, vistas como módulos independientes son fáciles de mantener. Extensibilidad: gracias a la modularidad y herencia pueden ser fácilmente extensibles al crecimiento de la aplicación. PRINCIPIOS POO Abstracción Modularidad Encapsulamiento Herencia Polimorfismo HERENCIA Se trata de crear una clase hija - subclase - que hereda de la clase padre - superclase - todos sus atributos, constructores, getters, setters y métodos que pueden ser modificados. La subclase puede tener sus propios atributos y métodos. Permite la reusabilidad del código. En Java se implementa mediante: extends CLASES ABSTRACTAS Es una clase que no se puede instanciar, se usa únicamente para definir subclases. Sus métodos no tienen implementación. Se usa la palabra reservada abstract INTERFACES Es una clase completamente abstracta sin implementación. Se declara con la palabra reservada interface. En la declaración de interfaces lo único que puede aparecer son las declaraciones de métodos (sin implementación) y/o definiciones constantesinterface nombre_de_interfaz { Tipo_de_retorno Nombre_del_metodo1 (lista de parametros); Tipo_de_retorno Nombre_del_metodo2 (lista de parametros); tipo variable_final1 = valor_constante; tipo variable_final2 = valor_constante; ENCAPSULAMIENTO Este concepto consiste en la ocultación del estado, o lo que es lo mismo, de los datos miembro de un objeto, de forma que sólo es posible modificar los mismos mediante las operaciones (métodos, en Java) definidos para dicho objeto. Cada objeto está aislado del exterior, de forma que la aplicación al final es un conjunto más o menos extenso de objetos que colaboran entre sí mediante el paso de mensajes entre ellos, es decir, mediante la invocación de sus operaciones o métodos. De esta forma, los detalles de implementación permanecen "ocultos" a las personas que usan las clases, evitando así modificaciones o accesos indebidos a los datos que almacenan las clases. Además, el usuario de la clase no se tiene que preocupar de cómo están implementados los métodos y propiedades, concentrándose sólo en cómo debe usarlos.