Programación Orientada a Objetos

Sección I

Es un modelo de programación que utiliza objetos, ligados mediante mensajes, para la solución de problemas. Es decir organizar los programas a imagen y semejanza de la organización de los objetos en el mundo real.

Los objetos poseen un conjunto de propiedades o atributos y un conjunto de métodos mediante os cuales muestran su comportamiento y además los objetos muestran un conjunto de interrelaciones entre ellos mediante mensajes a los que responden mediante métodos.

Un mecanismo importante de la POO, son las clases y los objetos están contenidos dentro de ellas, por eso se dice que un objeto es la instancia de una clase.

Ejemplo:

figuras objfiguras=new figuras(); //Creamos un nuevo objeto para la clase figuras

Un programa orientado a objetos se compone solamente de objetos, cada uno de ellos es una entidad que tiene unas propiedades particulares, los atributos y las formas de operar de ellos los métodos. Por ejemplo esta página Web es un objeto, tiene colores de fondo, anchura y altura, etc. son los atributos (características) y las rutinas que ejecuta el usuario cerrar, abrir, recorrer, etc. son los métodos.

Cuando se ejecuta un programa orientado a objetos, los objetos están recibiendo, interpretando y respondiendo mensajes de otros objetos y por lo tanto ejecutando métodos asociados con el objeto.

Los métodos se escriben en una clase de objetos y determinan como tiene que actuar el objeto cuando recibe el mensaje vinculado con ese método. A su vez un método puede también enviar mensajes a otros objetos solicitando una acción o información, además los atributos definidos en la clase permiten almacenar información para dicho objeto.

Cuando escribimos un programa Orientado a Objetos, lo que hacemos es diseñar a un conjunto de clases, desde las cuales se crearan los objetos necesarios cuando el programa se ejecute.

Normalmente los atributos, la estructura más interna de un objeto, se ocultan a los usuarios del objeto, manteniendo como unica conexión con el exterior a los mensajes. Esto quiere decir que los atributos de un objeto solamente podrán ser manipulados por los métodos del propio objeto. Este conjunto de métodos recibe el nombre de Interfaz (medio de comunicación con un objeto).

Para crear una clase solo utilizamos la palabra reservada class y el nombre de la clase

Ejemplo:

class figuras

{

//......

}

Veamos el ejemplo de un código:

Podemos crear otros métodos dentro de la misma clase como por ejemplo Circulo, Triángulo y Cuadrado los cuales se mostrarían de la siguiente manera:

En el main tenemos el objeto, ahora creamos un menú para hacer el llamado de cada uno de los métodos:

Dentro del mismo proyecto vamos a crear otra clase llamada Perímetros, dentro de la cuál vamos a crear 4 métodos que calculen el perímetro de las mismas figuras geométricas, quedando de la siguiente manera:

Conectamos a una clase con la otra mediante la creación de otro objeto al cual llamaremos objperimetro y hacemos las modificaciones para que dentro del menú podamos elegir entre calcular el Área o el Perímetro de cada figura Geométrica.

Realiza los cambios necesarios para que todas las figuras funcionen de la misma manera.

Agradecemos la aportación del alumno Mora Galicia Eduardo:

Sección II

Variables Globales

Cuando en un programa vamos a utilizar las mismas variables para diferentes métodos, podemos declararlas como Variables Globales y quedarían de la siguiente manera, como ejemplo el mismo programa de figuras:

Otro ejemplo:

Sección III

Otros tipos de métodos

En la vida real la información con la que va a trabajar un método puede llegar de manera externa a él, en ese caso se declara de manera diferente y el valor llega de otra función como por ejemplo:

En la figura anterior como podemos observar algunos valores llegan desde el método principal. es decir main, objarea.areacuadrado(lado), el valor que contiene lado es mandado al método areacuadrado que está dentro de la misma clase, pero no dentro del mismo main.

En el método areacuadrado la variable lado interactua con la formula y aporta un resultado, el cual se imprime como área.

En otra clase llamada Perímetro dentro del mismo proyecto, agregamos los métodos que calculen el perímetro de las mismas figuras, de igual manera las variables van a llegar desde el switch que existe en main.

Ej.

Termina con los métodos que faltan para las otras figuras.

Agradecemos la aportación del alumno Mora Galicia Eduardo:

Sección IV

Crea una clase nueva llamada Servicios, en ella crea un método llamado telcel

Ingresa el código siguiente, analiza y coméntale paso a paso su funcionamiento

Como puedes observar la clase no tiene main, agrégala y realiza un menú con otras posibles compañías que deberán estar en clases diferentes cada una.

Sección V

Vamos a trabajar con un ejemplo más avanzado, con variables globales, métodos que reciben y regresan información y otros que realizan algunas operaciones, todo dentro de una misma clase.

Existen tres clases de métodos, el primero son aquellos que reciben la información y almacenan los datos en las variables globales a los cuales llamaremos Setters

Setters: Del Inglés Set, que significa establecer, nos sirve para asignar un valor inicial a un atributo, pero de forma explícita, además el Setter nunca retorna nada (Siempre es void), y solo nos permite dar acceso público a ciertos atributos que deseemos el usuario pueda modificar.

Los segundos, aquellos que nos regresan la información almacenada en las variables globales, los cuales llamaremos Getters

Getters: Del Inglés Get, que significa obtener, pues nos sirve para obtener (recuperar o acceder) el valor ya asignado a un atributo y utilizarlo para cierto método.

Por último, aquellos que realizan alguna operación con los valores utilizados en la clase.

Veamos un programa de ejemplo:

Mismo programa pero dividida en diferentes clases, la primer clase que es la principal es la de CCuenta, en donde está el main, la creación del objeto, los llamados a función y envió de la misma.

Clase principal:

En otra subclase llamada Ahorro, dentro del mismo proyecto están algunos métodos, con las variables globales, observa que hay una variable diferente, el saldo, ya que es una variable que se va a compartir con diferentes clases y a interactuar con las mismas.

En otra clase llamada Retiro, se aplica sobre el saldo, el retiro. Observa que se importa el saldo del paquete ccuenta, de la subclase Ahorro

Para consultar el Saldo necesitamos un método que regrese el saldo, de otra subclase llamada Saldo.

Ejecuta la aplicación y observa que funciona de la misma manera que si estuviese todo en la misma clase, es decir, los métodos y las variables se comunican entre sí, enviando y recibiendo información entre los métodos y las variables que para eso son globales.

En la subclase llamada Servicios, agrega los métodos necesarios para que el usuario pueda seleccionar el servicio a pagar:

    • Telmex

    • CFE

    • Agua

    • Predial

    • Sky

Mismos, que las cantidades a descontar, se deben de restar del saldo.

Por último, con la subclase Crédito el usuario podrá pagar su tarjeta de crédito, utilizando para ello su saldo de su cuenta bancaria.

Aportación del estudiante, Luis Antonio Delgado Osorio:

Vamos a realizar algunos cambios en este segundo programa, añadir un menú de operaciones en el main:

En la clase Ahorro al final, agrego un método que me ayude en el pago de la tarjeta de crédito, el cual funcionará en el case 2 de mi menú:

Realiza los case 3, 4 y 5, ve revisando el saldo para el funcionamiento correcto del programa.

Aportación del alumno, Eduardo Mora Galicia:

Pensando en la clase de objetos CCuenta, elegimos los atributos de interés que van a definir está clase de objetos:

nombre: nombre del cliente del banco al que pertenece la cuenta.

cuenta: número de la cuenta.

saldo: saldo actual de la cuenta

tipoDeInteres: Tipo de interés en tanto por ciento

Todos los atributos son definidos en la clase por variables:

class CCuenta

{

private String nombre;

private String cuenta;

private double saldo;

private double tipoDeInteres;

//...........

}

Al utilizar private los atributos quedan protegidos de los usuarios, solo se podrá acceder a ellos mediante los métodos que implementen dentro de la misma clase

El comportamiento define las acciones que el objeto pueda tener, en nuestro ejemplo las acciones podrían ser:

    • Asignar el nombre del Cliente del banco a una cuenta.

    • Obtener el nombre del cliente de una cuenta.

    • Asignar el número de cuenta

    • Obtener el número de cuenta

    • Realizar un ingreso

    • Realizar un integro

    • Asignar el tipo de interés

    • Obtener el tipo de interés

    • Obtener el saldo, es decir el estado de cuenta.

Para definir este comportamiento, es necesario añadir métodos a la clase. los métodos son rutinas del código definidas dentro del cuerpo de la clase, que se ejecutan en respuesta a algún acción desde dentro de un objeto de esa clase. El conjunto de mensajes a los que el objeto puede responder es directamente proporcional al conjunto de métodos que implementan su clase.

public void asignarNombre (String nom){

if (nom.length() == 0){

System.out.println ("Error: cadena vacia");

return;

}

nombre = nom;

}

Observamos que el método es declarado como public, lo cuál nos indica que esté método es accesible desde cualquier otra clase o subclase que necesite utilizarlo, void nos indica que nos va a regresar cualquier valor que genere el método, después tenemos al identificador de método, es decir su nombre y por último entre paréntesis tenemos a los parámetros que va a manejar el método, si hubiere más de un parámetro los separamos por comas

Dentro de las llaves tenemos la acción o conjunto de acciones que va a realizar el método

Podemos decir que los nombres de los métodos de una clase forman al conjunto de mensajes a los que un objeto de esa clase puede responder.

Observemos el siguiente método:

public double estado(){

return saldo;

}

Esté método simplemente devolverá el saldo de la cuenta del banco.

Observemos entonces al conjunto de métodos de la clase completa CCuenta:

Modificamos main para que reciba la información que introduzca el usuario y queda así:

Añade los métodos necesarios así como diferentes clases de acuerdo al Cajero Automático

Realiza las modificaciones que creas pertinentes para que el usuario pueda hacer varias transacciones en el cajero automático pero, todos los cambios se verán reflejados a partir del saldo Inicial, además de que al finalizar la totalidad de las transacciones, el programa deberá mostrar el resumen de cada una de ellas.

Por ejemplo, en la clase Retiro creamos dos métodos

Modificamos main para activar conectar con la clase Retiro y sus respectivos métodos

Para crear objetos de una clase y poder trabajar con ellos tiene que existir una clase con un método main, puesto que éste es el punto de entrada y de salida de un programa.

El main puede añadirse en el mismo archivo fuente en el que está almacenada la clase CCuenta, ya sea al final o antes de la clase

Se puede también crear también de manera separada en otro archivo dentro de la msma carpeta o directorio darle otro nombre, pero creando un objeto a partir de la clase que queremos manejar como por ejemplo:

CCuenta cuenta01=new CCuenta( ); //Cuenta nueva

El método main, tiene que ser estático y generalmente es público devuelve cualquier resultado y tiene un parámetro args que es una matriz de una dimensión de cadena de caracteres

Para acceder a un miembro de un objeto (atributo o método) utilizamos la siguiente sintaxis:

nombre_objeto.nombre_miembro;

De está manera podemos manejar el objeto que creamos y si es que hubieré más de un objeto se nombra diferente a cada uno

Cualquier método de una clase tiene acceso(puede invocar) a todos los otros miembros (atributos y métodos) de su clase.

Un objeto de una clase sólo puede invocar a métodos de su clase.

Ejemplo 2:

Clase COrdenador para simular el trabajo con Ordenadores, debe incluir los siguientes atributos:

Marca: Dell, Toshiba, HP

Procesador: Intel, AMD.

Peso: 2, 2.5, 3.

Los atributos pueden también mostrar el estado del objeto, si está encendido o apagado, si la pantalla está activa o inactiva

El comportamiento define las acciones que el objeto puede emprender. Por ejemplo puede:

  • Ponerse en marcha

  • Apagarse

  • Desactivar la pantalla

  • Activar la pantalla

  • Cargar una aplicación

Para definir el comportamiento hay que crear métodos. Por ejemplo, agregamos a la clase COrdenador un método que responda a la acción de ponerlo en marcha:

El método EncenderOrdenador comprueba si el ordenador está encendido, si lo está muestra el mensaje que lo indica de lo contrario también lo indica.

Un método más para que el objeto muestre su estado:

El método Estado visualiza los atributos específicos de un objeto.

¿Cómo accedemos al valor de cada atributo si se han declarado como privados por emisión? Podemos implementar un método para establecer el valor del atributo privado marca de la clase COrdenador:

Una vez creada la clase creamos el método main y los objetos de la clase. Llamaremos a está clase Miordenador

El método main que es lo que hace:

La primer línea crea un objeto de la clase COrdenador y almacena una referencia de sí mismo en miOrdenador, dicha variable la vamos a utilizar para acceder a ese objeto con la siguientes lineas

La siguiente línea establece el atributo marca del objeto referenciado por miOrdenador

En las dos últimas líneas el objeto recibe los mensajes de EncenderOrdenador y Estado. Compila el programa y observa los resultados

Ejercicio:

Diseña una clase CCoche que represente coches, incluya los atributos marca, modelo y color. Además los métodos que simulen enviando mensajes, las acciones de arrancar motor, cambiar de velocidad, acelerar, frenar y parar el motor.

Constructor

Es un método especial de una clase que es llamado automáticamente siempre que se crea un objeto de esa clase. Su función es iniciar el objeto. Un constructor tiene el mismo nombre de la clase a la que pertenece y no retorna un valor. En esté caso como la clase se llama CCuenta entonces el constructor también se llamará CCuenta

Ejemplo:

public CCuenta( ){

}

Los constructores salvo casos excepcionales deben declararse siempre como públicos para que puedan ser invocados desde cualquier parte

La siguiente línea invoca al constructor sin parámetros:

CCuenta cuenta01=new CCuenta(); //invoca al constructor CCuenta

El operador new crea un nuevo objeto, en está caso de la clase CCuenta y a continuación se invoca al constructor de su clase para realizar las operaciones programadas en la clase.

Métodos Sobrecargados

Cuando en una clase un mismo método se define varias veces con distino número de parámetros, o bien con el mismo número de parámetros pero diferenciandose una definición de otra en que al menos un parámetro sea de tipo diferente, se dice que está sobrecargado.

Ejemplo:

Cuando una clase sobrecarga a un método una o más veces ¿Cómo sabe Java cuál tiene que ejecutar cuando se invoque? Esto lo hace comparando el número y los tipos de los argumentos especificados en la llamda, con los parámetros especificados en las distintas definiciones del método.

Operaciones con métodos

Ejercicio:

Crea una clase que permita trabajar con métodos diferentes, que calculen los precios de los diferentes autos de la marca Nissan y muestre las diferentes categorías y precios del catálogo de la empresa automotriz. Investigar en internet la tabla de precios y categorias.

Posteriormente utiliza un solo método sobrecargado con diferentes argumentos, muetra los resultados.

virj