PROGRAMACION ORIENTADA A OBJETOS

 ¿QUE ES LA PROGRAMACION ORIENTADA A OBJETOS?

La Programación Orientada a Objetos (POO) es un paradigma de programación es decir, un modelo o un estilo de programación que nos da unas guías sobre cómo trabajar con él. Se basa en el concepto de clases y objetos. Este tipo de programación se utiliza para estructurar un programa de software en piezas simples y reutilizables de planos de código (clases) para crear instancias individuales de objetos.

Con el paradigma de Programación Orientado a Objetos lo que se busca es dejar de centrarse en la lógica pura de los programas, para empezar a pensar en objetos, lo que constituye la base de este paradigma. Esto ayuda muchísimo en sistemas grandes, ya que en vez de pensar en funciones, se piensa en las relaciones o interacciones de los diferentes componentes del sistema.

¿CUALES SON LOS PRINCIPALES LENGUAJES PARA LA POO?

En la actualidad existen diferentes lenguajes de programación orientada a objetos, como C++, Objetive C, Java, Ruby, Visual Basic, Visual C Sharp, Simula, Perl, TypeScript, Smalltalk, PHP o Python. C++ y Java son los dos lenguajes de programación orientada a objetos más usados.

1.1 CONCEPTOS DEL PARADIGMA DE PROGRAMACION

El primer y más importante concepto que tenemos que tener en cuenta a la hora de hablar de POO es la distinción entre clase y objeto.

Una clase es una plantilla. Define de manera genérica cómo van a ser los objetos de un determinado tipo y un objeto es la implementación de esa plantilla.

El segundo concepto a entender es la diferencia entre atributo y método.

Los atributos son propiedades del objeto que lo enmarcan y le dan forma. Estos pueden ser por ejemplo un id, nombre, etc. También pueden ser acciones que puede realizar y los mismos pueden ser implementados como métodos. Los métodos de la clase son funciones que el objeto puede invocar (por ejemplo, hablar, caminar, respirar en el objeto de una persona).

Los paradigmas de programación son los principios fundamentales de la programación de software. Lo más fácil es planteárselos como estilos de programación fundamentalmente diferenciados que, en consecuencia, generan códigos software que están estructurados de forma distinta.


1.2 CLASES Y OBJETOS
En una clase se definen datos comunes a todos los objetos, luego los objetos son creados utilizando esa información y adoptan un estado particular que puede ir cambiando en el transcurso de su vida. Esto quiere decir que podemos tener distintos objetos que provienen de la misma clase pero difieren en sus estados.

 

El modelado de la realidad se realiza a partir de clases. Las clases son modelos o abstracciones de la realidad que representan un elemento de un conjunto de objetos como aviones, animales, personas, autos, computadoras, ecuaciones, figuras geométricas, elementos de una interfaz gráfica, archivos, etc.

Cada objeto debe ser responsable de su propio comportamiento; para ello, cada objeto contiene información o atributos (que se conforman con el estado del objeto) y tiene una serie de métodos utilizados para interactuar con él llamados métodos: obtener información, modificar el estado del objeto, etc. Los métodos se invocan a partir de llamadas a procedimientos.



1.3 OBJETOS TANGIBLES E INTANGIBLES DEL DOMINIO DEL PROBLEMA Y OBJETOS DEL ESPACIO DE SOLUCIONES
En la programación orientada a objetos, el modelado de la realidad se realiza a partir de clases. Las clases son modelos o abstracciones de la realidad que representan un elemento de un conjunto de objetos como aviones, animales, personas, autos, computadoras, ecuaciones, figuras geométricas, elementos de una interfaz gráfica, archivos, etc.
Cada objeto debe ser responsable de su propio comportamiento; para ello, cada objeto contiene información o atributos (que se conforman con el estado del objeto) y tiene una serie de métodos utilizados para interactuar con él llamados métodos: obtener información, modificar el estado del objeto, etc. Los métodos se invocan a partir de llamadas a procedimientos. El modelado que se hace de la información y del comportamiento de los miembros de la clase se hace dentro del dominio del problema, es decir, sólo se incluyen las partes de son relevantes para poder resolver el problema planteado. Esto se conoce como principio de abstracción. Por ejemplo, suponiendo que deseas modelar una computadora que se encuentra en la escuela, te interesaría conocer atributos como el número de serie, marca, procesador, el sistema operativo que tiene instalado, cuanta memoria tiene, su ubicación en un aula. Así como qué acciones (métodos) puedes hacer con la computadora: encender la computadora, ejecutar algún programa, almacenar archivos, terminar de usar un programa, apagar la computadora. Para ello, utilizaremos una lista de características divididas en tres secciones: nombre o identificador de la clase, una sección donde se listan los atributos y una última sección donde se listan los métodos:


1.4 MODELOS

AbstracciónLa abstracción tiene dos puntos. Lo primero es que nos permite ocultar del usuario el funcionamiento interno de nuestro sistema. Por ejemplo exponer en una GUI (Interfaz Gráfica) un botón de comprar con lo que entiende que puede comprar su producto con un clic en ese botón sin saber qué sucede de fondo en nuestro sistema. También nos permite abstraer de los desarrolladores las funcionalidades internas de la clase. Permitiendo que los desarrolladores utilicen y manipulen la clase sin necesidad de entender qué sucede internamente en la misma. 

Herencia: La herencia es la cualidad que nos permite reutilizar nuestro código y modelos plasmados en forma de clase implementando subclases. Las nuevas clases heredaran (como en la herencia genética) atributos y métodos de las clases padres o superclases. Este tipo de implementación de clases y super clases nos ayuda a crear sistemas escalables y con multiplicidad de opciones. Podemos ver esta característica en sistemas de escomerse en los que tenemos diferentes tipos de usuarios(superclase) en los que unos se definen como compradores y otros como vendedores; también así en los productos y sus categorías.

Polimorfismo: El polimorfismo nos permite modificar ligeramente los métodos y atributos de las subclases previamente definidas en la superclase. Para entender mejor el polimorfismo podemos entenderlo bajo el aspecto de un sistema de usuarios en una plataforma de streaming de películas. Podemos tener usuarios con diferentes características pero un modelo similar, como es el caso de usuarios menores de edad a los que se les asignan cierto contenido que pueden ver dependiendo de su edad. Sin embargo el resto de los métodos y atributos de la clase Usuario las comparte con otros usuarios.

Encapsulación: El proceso de encapsulación nos permite proteger los datos y la integridad de nuestro sistema mediante la privacidad de los mismos. Existen diferentes tipos de encapsulación dependiendo del lenguaje. En casos como Typescript contamos con la posibilidad de encapsular los datos en el scope de la clase (private) y las subclases (protected). Como también existe la posibilidad de encapsular la modificación de datos permitiendo que la instancia de la misma solo pueda leer el dato (readonly) pero no modificarlo. Con estas posibilidades podemos proteger los procesos de nuestro sistema tanto de los usuarios como de otros desarrolladores definiendo las posibilidades acceso de cada atributo y método.


1.5 BRECHA SEMANTICA

Ejemplos de semántica en programación. Algunos de los usos comunes de la semántica en programación son: Facilita la descripción de los procesos que sigue un ordenador cuando ejecuta un programa en ese lenguaje específico. Aporta una visibilidad que ayuda a comprender mejor lo que está haciendo un programa. Permite conocer el significado de los lenguajes de programación y cómo pueden surgir operaciones no deseadas. Estos planteamientos nada tienen que ver con los usos erróneos comunes, como los que la equiparan a la sintaxis, interpretando que se refiere al código detrás de un programa y las expresiones que lo crean.

 

1.6 COMPLEJIDAD EN SISTEMAS DE SOFTWARE

El término de complejidad se refiere al estado de eventos o cosas, que tienen múltiple interconexiones y una estructura altamente complicada. En programación de software, a medida que el diseño de software es obtenido, el número de elementos y sus interconexiones gradualmente aparecen para ser mayores, lo que hace difícil que se pueda entender en un solo intento. La complejidad del diseño de Software es difícil de evaluar sin usar complejos métodos de medida

Medidas de complejidad de Halstead

En 1977, el Señor Maurice Howard Halstead introdujo sistemas de medida para medir la complejidad del software. Las medidas de Halstead dependen de la implementación real del programa y de sus medidas, las cuales son computadas directamente desde los operadores y operandos del código de origen, de forma estática. Permite evaluar el 'testing time', el vocabulario, la medida, dificultad, errores, y esfuerzos para códigos de origen C/C++/Java.








Medidas de Complejidad ciclomática: Cada programa incluye enunciados para ejecutar con tal de llevar a cabo una tarea y otros enunciados de toma de decisiones que deciden, qué órdenes son necesarias. Los enunciados de toma de decisiones cambian el flujo del programa. Si comparamos dos programas del mismo tamaño, el que tiene más enunciados de toma de decisiones será más complejo ya que el control de programa salta con frecuencia.




Métrica de punto función: Es ampliamente usada para medir el tamaño del software. La Métrica de punto función, se centra en la funcionalidad que aporta el sistema. Las características y funcionalidades del sistema se usan para medir la complejidad del software. La Métrica de punto función, cuenta con cinco parámetros, llamados Entrada externo, Salida externa, Archivos de lógica interna, Archivos de interfaz externa, y Consulta externa. Para considerar la complejidad del software cada parámetro se categorizará como simple, medio o complejo.

      

1.7 EVOLUCION DEL PARADIGMA OO 

Los conceptos de la POO tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard, del Centro de Cómputo Noruego en Oslo. En este centro se trabajaba en simulaciones de naves, que fueron confundidas por la explosión combinatoria de cómo las diversas cualidades de diferentes naves podían afectar unas a las otras. La idea surgió al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus «propios» datos y comportamientos. Fueron refinados más tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar «sobre la marcha» (en tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos

La POO se fue convirtiendo en el estilo de programación dominante a mediados de los años 1980, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las interfaces gráficas de usuario, para las cuales la POO está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos.

Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp más Pascal, entre otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del código. Los lenguajes orientados a objetos «puros», por su parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras «seguras». 

El lenguaje de programación Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos, pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet y a la implementación de la máquina virtual Java en la mayoría de navegadores web. PHP en su versión 5 se ha modificado; soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos.



2.1PROGRAMACION PROCEDUAL

La programación procedural o procedimental se deriva de la programación estructurada. Consiste en dividir el código en secciones lógicas llamadas rutinas o procedimientos, donde cada procedimiento resuelve una tarea específica, y se ejecuta cada vez que sea necesario. Cabe destacar que un procedimiento puede llamar a otros procedimientos. Algunos de los primeros lenguajes procedurales son FORTRAN, ALGOL, COBOL Y BASIC.

2.2 ABSTRACCION

La abstracción encarada desde el punto de vista de la programación orientada a objetos expresa las características esenciales de un objeto, las cuales distinguen al objeto de los demás. Lo que hace preguntarse.

¿Qué es un ADT en programación?

Un tipo de dato abstracto o ADT (Abstract Data Type) es definido por una especificación abstracta, es decir, permite especificar las propiedades lógicas y funcionales de un tipo de dato.

2.3CLASES Y OBJETOS 

Las clases son modelos o abstracciones de la realidad que representan un elemento de un conjunto de objetos como aviones, animales, personas, autos, computadoras, ecuaciones, figuras geométricas, elementos de una interfaz gráfica, archivos, etc.

Cada objeto debe ser responsable de su propio comportamiento; para ello, cada objeto contiene información o atributos (que se conforman con el estado del objeto) y tiene una serie de métodos utilizados para interactuar con él llamados métodos: obtener información, modificar el estado del objeto, etc. 


2.4 ENCAPSULAMIENTO

El encapsulamiento en la programación orientada a objetos es cuando  se limita el acceso o se da un acceso restringido de una propiedad a los elementos que necesita un miembro y no a ninguno más. El elemento más común de encapsulamiento son las clases, donde encapsulamos y se  engloba tanto métodos como propiedades. Otro ejemplo muy común de encapsulamiento son los getters y setters de las propiedades dentro de una clase. Por defecto nos dan el valor “normal” pero se  pueden modificar para que cambie.




 

2.5 PERMISOS DE ACCESO EN PROGRAMACIÓN ORIENTADA A OBJETOS

Son modificadores de acceso y nos ayudan a implementar la encapsulacion (o el ocultamiento de información). Indican al compilador qué otras clases deberían tener acceso al campo o método que se está definiendo.

private - Solo la clase actual tendrá acceso al campo o método.

protected - Solo la clase y subclases actuales (y algunas veces también las clases del mismo paquete) de esta clase tendrán acceso al campo o método.

public - Cualquier clase puede hacer referencia al campo o llamar al método.

Esto supone que estas palabras clave se utilizan como parte de una declaración de campo o método dentro de una definición de clase


2.6 INTERFAZ (PROTOCOLO)

Una interfaz (también llamada protocolo) es un medio común para que los objetos no relacionados se comuniquen entre sí. Estas son definiciones de metodos y valores sobre los cuales los objetos están de acuerdo para cooperar.

Por ejemplo, en Java donde se le llama Interfaz (Java interfaces), la interfaz Comparable especifica un método compareTo() que las clases deben implementar. Esto significa que un método aparte de ordenamiento, por ejemplo, puede ordenar cualquier objeto que implemente la interfaz Comparable, sin tener que saber nada sobre la naturaleza interna de la clase (excepto que dos de estos objetos pueden compararse mediante compareTo()).

El protocolo es una descripción de:

1 Los mensajes que el objeto entiende.

2 Los argumentos con los que estos mensajes pueden ser suministrados.

3 Los tipos de resultados que devuelven estos mensajes.

4 Los invariantes que se conservan a pesar de las modificaciones en el estado de un objeto.

5 Las situaciones excepcionales que serán requeridas para ser manejadas por los clientes al objeto.



2.8 MECANISMO DE HERENCIA 

Se trata de uno de los pilares fundamentales de la programación orientada a objetos. Es el mecanismo por el cual una clase permite heredar las características (atributos y métodos) de otra clase

La herencia permite que se puedan definir nuevas clases basadas de unas ya existentes a fin de reutilizar el código, generando así una jerarquía de clases dentro de una aplicación. Si una clase deriva de otra, esta hereda sus atributos y métodos y puede añadir nuevos atributos, métodos o redefinir los heredados.

En Java tenemos que tener claro cómo llamar a la clase principal de la que heredamos y aquella que hereda de ella, así, clase que se hereda se denomina superclase. La clase que hereda se llama subclase. Por lo tanto, una subclase es una versión especializada de una superclase. Hereda todas las variables y métodos definidos por la superclase y agrega sus propios elementos únicos.

Terminología importante:

Superclase: la clase cuyas características se heredan se conoce como superclase (o una clase base o una clase principal).

Subclase: la clase que hereda la otra clase se conoce como subclase (o una clase derivada, clase extendida o clase hija). La subclase puede agregar sus propios campos y métodos, además de los campos y métodos de la superclase.

Reutilización: la herencia respalda el concepto de “reutilización”, es decir, cuando queremos crear una clase nueva y ya hay una clase que incluye parte del código que queremos, podemos derivar nuestra nueva clase de la clase existente. Al hacer esto, estamos reutilizando los campos/atributos y métodos de la clase existente.



2.9 POLIFORMISMO

El polimorfismo se refiere a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos. El único requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía.

En lenguajes basados en clases y con un sistema de tipos de datos fuerte (independientemente de si la verificación se realiza en tiempo de compilación o de ejecución), es posible que el único modo de poder utilizar objetos de manera polimórfica sea que compartan una raíz común, es decir, una jerarquía de clases, ya que esto proporciona la compatibilidad de tipos de datos necesaria para que sea posible utilizar una misma variable de referencia (que podrá apuntar a objetos de diversas subclases de dicha jerarquía) para enviar el mismo mensaje (o un grupo de mensajes) al grupo de objetos que se tratan de manera polimórfica.


3.1 JUSTIFICACION DE LA SELECCIÓN DE JAVA.

En la actualidad, es un conjunto de herramientas que abarcan diversas industrias. Por lo tanto, consta de los elementos que se enumeran a continuación: Java Development Kit (JDK): es lo primero que descarga un desarrollador para iniciar cualquier desarrollo en Java. El p ropio JDK es un paquete de software que comprende el compilador, la documentación, las utilidades y Java Runtime Environment (JRE).

Java Runtime Environment: una capa de software que se ejecuta sobre el sistema operativo de una computadora. Básicamente incluye Java Virtual Machine (JVM) y la biblioteca de clases Java estándar. JRE fusiona el código con las bibliotecas requeridas, luego lanza la JVM (una herramienta que convierte el código de bytes de Java en código de máquina) para la ejecución del código. Además, garantiza que las dependencias estén disponibles para los programas Java que desarrolle.

Entorno de desarrollo integrado (IDE, por sus siglas en inglés): la aplicación que permite al usuario ejecutar, editar y compilar el código. Varios IDE tienen características como resaltado de sintaxis y finalización de código, lo que facilita el proceso de codificación. Es una realidad que JAVA está en casi todas partes. Si tu smartphone funciona con Android, es probable que esté lleno de Java. También lo vemos en Big Data, aplicaciones web, computación científica.


3.2 SINTAXIS Y SEMÁNTICA.

El lenguaje Java se describe por su sintaxis y su semántica. La sintaxis define la estructura y apariencia de al escritura del código Java. La semántica define lo que significa cada parte del código y cómo se comportará cuando se ejecuta. Los componentes básicos de la sintaxis son las palabras reservadas (keywords) y componentes de léxico (tokens). Una palabra reservada es una palabra o identificador que tiene un significado específico en el lenguaje. Las palabras reservadas sólo se pueden utilizar en el mundo en que está definido en el lenguaje. Los componentes de léxico( token) incluyen cada palabra, símbolo o grupo de símbolos que aparecen en el código fuente del programa. Una gramática se utiliza para llevar juntos todos los componentes de la sintaxis y definir la estructura de unidades sintácticamente correcta del código Java. La gramática Java específica el orden preciso en el que se puedan escribir las palabras reservadas y los símbolos, y se utilizan por el compilador Java para asegurar que el programador hace las cosas correctas. Cualquier código que no esté escrito de modo correcto emitirá mensajes de error y no construirá un programa ejecutable. Este apéndice describe las reglas básicas de sintaxis de Java que cumplen las diferentes versiones existentes en la fecha de publicación de este libro: JDK1.1, 1.2 y 1.3, con el compilador Java 2.0. Gran parte de la sintaxis de Java se basa en C y/o C++



3.3 ESPECIFICACIONES DE CLASES.

Es SIMPLE: Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las características menos usadas y más confusas de éstos. C++ es un lenguaje que adolece de falta de seguridad, pero C y C++ son lenguajes más difundidos, por ello Java se diseñó para ser parecido a C++ y así facilitar un rápido y fácil aprendizaje.

Java elimina muchas de las características de otros lenguajes como C++, para mantener reducidas las especificaciones del lenguaje y añadir características muy útiles como el garbage collector (reciclador de memoria dinámica). No es necesario preocuparse de liberar memoria, el reciclador se encarga de ello y como es un thread de baja prioridad, cuando entra en acción, permite liberar bloques de memoria muy grandes, lo que reduce la fragmentación de la memoria.

Java reduce en un 50% los errores más comunes de programación con lenguajes como C y C++ al eliminar muchas de las características de éstos, entre las que destacan:

aritmética de punteros

no existen referencias

>registros (struct)

definición de tipos (typedef)

macros (#define)

necesidad de liberar memoria (free)

Aunque, en realidad, lo que hace es eliminar las palabras reservadas (struct, typedef), ya que las clases son algo parecido.

Además, el intérprete completo de Java que hay en este momento es muy pequeño, solamente ocupa 215 Kb de RAM.

ES ORIENTADO A OBJETOS:

Java implementa la tecnología básica de C++ con algunas mejoras y elimina algunas cosas para mantener el objetivo de la simplicidad del lenguaje. Java trabaja con sus datos como objetos y con interfaces a esos objetos. Soporta las tres características propias del paradigma de la orientación a objetos: encapsulación, herencia y polimorfismo. Las plantillas de objetos son llamadas, como en C++, clases y sus copias, instancias. Estas instancias, como en C++, necesitan ser construidas y destruidas en espacios de memoria.

Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolución dinámica de métodos. Esta característica deriva del lenguaje Objective C, propietario del sistema operativo Next. En C++ se suele trabajar con librerías dinámicas (DLLs) que obligan a recompilar la aplicación cuando se retocan las funciones que se encuentran en su interior. Este inconveniente es resuelto por Java mediante una interfaz específica llamada RTTI (RunTime Type Identification) que define la interacción entre objetos excluyendo variables de instancias o implementación de métodos. Las clases en Java tienen una representación en el runtime que permite a los programadores interrogar por el tipo de clase y enlazar dinámicamente la clase con el resultado de la búsqueda.

Es DISTRIBUIDO:

Java se ha construido con extensas capacidades de interconexión TCP/IP. Existen librerías de rutinas para acceder e interactuar con protocolos como http y ftp. Esto permite a los programadores acceder a la información a través de la red con tanta facilidad como a los ficheros locales.

La verdad es que Java en sí no es distribuido, sino que proporciona las librerías y herramientas para que los programas puedan ser distribuidos, es decir, que se corran en varias máquinas, interactuando.

Es ROBUSTO:

Java realiza verificaciones en busca de problemas tanto en tiempo de compilación como en tiempo de ejecución. La comprobación de tipos en Java ayuda a detectar errores, lo antes posible, en el ciclo de desarrollo. Java obliga a la declaración explícita de métodos, reduciendo así las posibilidades de error. Maneja la memoria para eliminar las preocupaciones por parte del programador de la liberación o corrupción de memoria. También implementa los arrays auténticos, en vez de listas enlazadas de punteros, con comprobación de límites, para evitar la posibilidad de sobreescribir o corromper memoria resultado de punteros que señalan a zonas equivocadas. Estas características reducen drásticamente el tiempo de desarrollo de aplicaciones en Java.

Además, para asegurar el funcionamiento de la aplicación, realiza una verificación de los byte-codes, que son el resultado de la compilación de un programa Java. Es un código de máquina virtual que es interpretado por el intérprete Java. No es el código máquina directamente entendible por el hardware, pero ya ha pasado todas las fases del compilador: análisis de instrucciones, orden de operadores, etc., y ya tiene generada la pila de ejecución de órdenes.

Java proporciona, pues:

Comprobación de punteros

Comprobación de límites de arrays

Excepciones

Verificación de byte-codes

Es de ARQUITECTURA NEUTRAL:

Para establecer Java como parte integral de la red, el compilador Java compila su código a un fichero objeto de formato independiente de la arquitectura de la máquina en que se ejecutará. Cualquier máquina que tenga el sistema de ejecución (run-time) puede ejecutar ese código objeto, sin importar en modo alguno la máquina en que ha sido generado. Actualmente existen sistemas run-time para Solaris 2.x, SunOs 4.1.x, Windows 95, Windows NT, Linux, Irix, Aix, Mac, Apple y probablemente haya grupos de desarrollo trabajando en el porting a otras plataformas.




3.4 VARIABLES DE INSTANCIA Y DE CLASE.

Variables de instancia: en la declaración de una clase, los atributos están representados por variables. Dichas variables se denominan variables de instancia, es decir, variables miembro.

Método de instancia: El método declarado en la clase, por ejemplo: my (self), debe ser instanciado antes de que pueda usarse, de lo contrario, se informará un error.

Variables de clase: variables públicas, se puede usar cada instancia.





3.5  HERENCIA

La herencia java es una propiedad que permite que una clase adquiera los atributos y métodos de otra clase La clase que hereda se llama subclase o clase derivada, y la clase de la que hereda se llama superclase o clase base La palabra reservada para realizar la herencia entre clases es extends La herencia java es simple, es decir, una clase solo puede heredar de una única clase Si se necesita heredar de varias clases, se deben usar las interfaces La herencia java permite crear objetos especializados a partir de objetos generales



 

3.6 POLIFORMISMO ESTATCIO Y DINAMICO.

Polimorfismo estático

Este tipo de polimorfismo, también conocido como de compilación, se utiliza para crear múltiples métodos con el mismo nombre en la misma clase, que contengan diferentes números de parámetros o bien parámetros de distintos tipos

 

3.7 METODOS

Métodos en Java

Método, es el nombre que reciben los subprogramas o procedimientos en Java. Todos los métodos son funciones, es decir retornan un dato. Aunque si definimos un método que retorna un tipo “void”, significa que no retorna nada. Ej.: void imprimir()

Parámetros: Un método puede recibir cero, uno o más parámetros. Los parámetros, son datos de entrada que pueden ser rellenos en la llamada al método. Dentro del cuerpo del método, los parámetros pueden ser usados como variables. Cuando se definen los parámetros de un método, se indica de qué tipo son. Cuando hay dos o más parámetros son separados por comas.

3.8 ENVIO DE MENSAJES

Puedes enviar un mensaje de texto SMS a cualquier teléfono usando un programa Java. Será de gran ayuda si tienes alguna experiencia con el lenguaje de programación Java. También necesitas saber el operador de telefonía móvil del destinatario. Nuestro plan de acción es el siguiente: vamos a aprovechar que la mayoría de las compañías móviles permiten el acceso a sus direcciones SMTP (Simple Mail Transfer Protocol). Entonces todo lo que se tiene que hacer es utilizar Java para enviar un mensaje de correo electrónico a la dirección correcta, es decir, algo así como TuNúmeroTelefónico@TuProveedorSMTP.com. El vínculo "Direcciones de E-mail SMTP" que aparece en la sección de Recursos contiene una lista completa de SMTP para casi todos los operadores de telefonía móvil. También necesitarás el Eclipse para desarrolladores de Java IDE (si aún no lo tienes) para facilitar la instalación correcta de las bibliotecas Java de una manera rápida y fácil




.3.9 CREACION Y DESTRUCCION DE OBJETOS

Constructores en Java  Un constructor se encarga de la correcta inicialización de los objetos antes de su uso.  Método con el mismo nombre de la clase pero sin valor de retorno.  Todas las clases deben tener al menos un constructor.  Si el programador no define un constructor, el compilador incluye un constructor vacío sin parámetros (constructor por defecto). Curso 2008/2009 Programación Orientada a Objetos 19 Constructores en Java  La construcción de un objeto consta de tres etapas:  Se reserva en memoria espacio para la estructura de datos que define la clase.  Se realiza la inicialización de los campos con los valores por defecto asociados a su tipo de datos.

3.10 CLASES ABSTRACTAS Y CONCRETAS

Clase abstracta : una clase abstracta es un tipo de clase en Java que se declara mediante la palabra clave abstracta. Una clase abstracta no se puede instanciar directamente, es decir, el objeto de dicha clase no se puede crear directamente usando la nueva palabra clave. Una clase abstracta puede ser instanciada por una subclase concreta o definiendo todo el método abstracto junto con la nueva declaración. Puede contener o no un método abstracto. Un método abstracto se declara mediante una palabra clave abstracta, tales métodos no pueden tener un cuerpo. Si una clase contiene un método abstracto, entonces también debe ser abstracto.
Clase concreta: Una clase concreta en Java es un tipo de subclase, que implementa todo el método abstracto de su clase súper abstracta a la que se extiende. También tiene implementaciones de todos los métodos de interfaces que implementa.

Clase abstracta vs clase concreta

Modificador: una clase abstracta se declara usando un modificador abstracto. La clase concreta no debe declararse con la palabra clave abstracta, al hacerlo, también se convertirá en una clase abstracta. 

Instanciación: una clase abstracta no se puede instanciar directamente, es decir, el objeto de dicha clase no se puede crear directamente usando una nueva palabra clave. Una clase abstracta puede ser instanciada por una subclase concreta o definiendo todo el método abstracto junto con la nueva declaración. Se puede crear una instancia de una clase concreta directamente, utilizando una nueva palabra clave. 



3.11 INTERFACES

Para lograr esto tenemos las interfaces, que son estructuras muy similares a las clases en las cuales podemos definir métodos y constantes que serán utilizadas por las clases que las implementen, esto se hace con la finalidad de poder añadir comportamientos que hagan a las clases compatibles, para lograr cosas tan importantes como comparación de objetos.










Comentarios