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.
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.
Abstracción: La 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.
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.
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.
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
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
Publicar un comentario