Introducción a la programación orientada a objetos

Anuncio
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
Objetivos
El alumno conocerá y aplicará el concepto de programación orientada a objetos para la
realización de programas.
Al final de esta práctica el alumno podrá:
Implementar programas orientados a objetos, que utilicen los conceptos del paradigma
de la programación orientada a objetos.
Antecedentes
1. Tener las bases de la programación orientada a objetos.
2. Manejar sentencias de control de flujo en algún lenguaje de programación
Introducción
Para entender el paradigma de programación orientada a objetos, es necesario
primeramente definir algunos conceptos.
•
•
•
•
Objeto.- Es un conjunto de atributos y métodos que conforman una entidad.
Clase.- Es un tipo de objeto definido por el usuario. Es decir, una clase, visto desde
la programación estructurada, es como un nuevo tipo de dato, creado por el usuario.
Atributos.- Son las características que tiene un objeto. Por ejemplo, un lapicero
tendría como atributos marca, color, diámetro de puntilla, número de puntillas,
goma, etc.
Métodos.- Son todas las acciones que puede realizar un objeto. Por ejemplo, el
lapicero tendría como método escribir();si además tuviera goma, también podría
tener como método borrar().
En la programación orientada a objetos se definió, por convención, una nomenclatura para
escribir los programas, y así identificar a simple vista, clases, atributos y métodos:
1) No debe existir ningún espacio en blanco, ni guiones bajos dentro de los nombres.
2) En el caso de las clases, la primera letra de cada palabra que conforma el nombre,
deberá ser mayúscula, por ejemplo: RaizCuadrada, MetodoNewton, etc.
3) Para los nombres de atributos, las letras de todo el nombre deberán ser minúsculas;
en el caso de que incluya varias palabras, a partir de la segunda deberá iniciar con
mayúscula; por ejemplo: banderaIf, parteReal, parteImaginaria,
anguloExpresionPolar, etc.
4) Los nombres de métodos, siguen la misma nomenclatura que con los atributos, la
diferencia es que los métodos llevan un par de paréntesis después del nombre.
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
A continuación se presenta el clásico programa que imprime “hola mundo”, escrito en el
lenguaje de programación Java
Ejemplo 1
Imprimir “hola mundo” en pantalla
public class HolaMundo{
public static void main(String args[]){
System.out.println("hola mundo");
}
}
Se puede observar que este programa inicia definiendo una clase. Esto ocurre siempre que
se elabora un programa escrito en Java. En este caso, se definió una clase que se llama
HolaMundo:
public class HolaMundo{
}
Como se indicó anteriormente, toda clase genera objetos, y estos objetos deben tener
atributos y métodos. Pero cuando se requiere ejecutar una clase en lugar de crear un objeto,
ésta debe contener un método main, y siempre se define de la misma forma.
public static void main(String args[]){
}
Y el equivalente al printf() de C, en Java es:
System.out.println();
Habiendo visto las bases de lo que conforma una clase, ahora se establecerán pasos en el
diseño, desarrollo e implementación de una clase.
En el diseño de programas orientados a objetos, existe una serie de pasos a seguir:
a) Leer y analizar el enunciado.
b) Identificar las clases a utilizar.
c) Para cada clase definir atributos y métodos.
d) Elaborar el diagrama de clases.
Ejemplo 2
Elaborar un programa que defina una entidad Persona que tenga como datos nombre,
dirección, teléfono y edad; además que tenga como acciones caminar, correr y hablar por
teléfono. Posteriormente que cree dos instancias de esta entidad y a cada una le asigne
valores a sus datos e invoque a las actividades definidas.
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
a) Leer y analizar el enunciado.
Se requiere implementar una clase llamada Persona y crear dos objetos a partir de dicha
clase.
b) Identificar las clases a utilizar.
Sólo se necesita una clase, en este caso Persona.
c) Para cada clase definir atributos y métodos.
De acuerdo al enunciado los datos de la entidad son los atributos y los métodos son las
acciones que realiza la entidad.
Atributos:
1) nombre, que será de tipo String.
2) direccion, que será de tipo String
3) telefono, que será de tipo String
4) edad, que será de tipo int
Métodos:
1) caminar()
2) correr()
3) hablarPorTelefono()
d) Elaborar el diagrama de clases
Un diagrama de clases representa, de manera esquemática, a las clases y las relaciones que
hay entre ellas. Cada clase se visualiza como una caja con tres secciones, donde en la
primera sección se pone el nombre de la clase, en la segunda sección los atributos de ésta, y
en la tercera sus métodos.
Por lo que el diagrama de clases para este ejemplo queda de la siguiente forma:
Persona
String nombre
String direccion
String telefono
int edad
caminar()
correr()
hablarPorTelefono()
Al llegar a este punto, se puede empezar a programar. Partiendo del esqueleto básico visto
en el ejemplo anterior, definimos la clase y el método main.
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
public class Persona{
public static void main(String args[]){
}
}
Ahora sobre esta base, se le agregan los atributos y métodos.
public class Persona{
String nombre;
String direccion;
String telefono;
int edad;
public static void main(String args[]){
}
public void caminar(){
}
public void correr(){
}
public void hablarPorTelefono(){
}
}
Una vez definida la clase, se agregará código para crear objetos.
Para generar un nuevo objeto se utiliza un constructor. Cuando se define una clase, se
genera un constructor por omisión, con el mismo nombre que la clase; este constructor es
invocado a través de la palabra new. Por lo tanto, para crear un objeto es similar a declarar
una variable en lenguaje estructurado: se pone el tipo de dato, que en este caso es el nombre
de la clase, después la variable que será el nombre del objeto, y luego, a través de una
asignación, se invoca al constructor.
Clase variableObjeto = new Clase();
Para el ejemplo, el código para la creación de los dos objetos requeridos es:
Persona p1 = new Persona();
Persona p2 = new Persona();
Así, cuando se escribe new Persona(), se invoca al constructor Persona() para crear un
objeto de la clase Persona. Este objeto creado se manipulará a través de la variable
correspondiente (p1 o p2).
Como ya se mencionó, cuando se crea una clase se genera automáticamente un método
constructor por omisión, por lo que no es necesario ponerlo explícitamente. Para este
ejemplo se pondrá de forma explícita para mostrar cómo se define y funciona. El código del
método constructor del ejemplo se presenta a continuación.
public Persona(){
System.out.println("Creando un objeto");
}
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
Hasta este punto, el código se muestra a continuación:
public class Persona{
public Persona(){
System.out.println("Creando un objeto");
}
String nombre;
String direccion;
String telefono;
int edad;
public static void main(String args[]){
Persona p1 = new Persona();
Persona p2 = new Persona();
}
public void caminar(){
}
public void correr(){
}
public void hablarPorTelefono(){
}
}
Si se compila y ejecuta este código, se tendrá una salida como la siguiente:
Creando un objeto
Creando un objeto
Esta salida se debe a que el constructor además de crear un objeto de la clase Persona
imprime el mensaje: Creando un objeto
Ahora se agregará código al método constructor para que al momento de que genere el
objeto le asigne valores a sus atributos. Para realizar esto, el método constructor recibirá
como parámetros los valores de los atributos; esto es similar al uso de parámetros en
funciones de un lenguaje estructurado. El código final del constructor se muestra a
continuación.
public Persona(String nom, String dir, String tel, int ed){
System.out.println("Creando un objeto");
this.nombre = nom;
this.direccion = dir;
this.telefono = tel;
this.edad = ed;
}
Como se observa en este código, los parámetros tienen indicado el tipo y van separados por
coma. Además se ha introducido una nueva palabra: this; esta palabra, anteponiéndola a los
nombres de los atributos, sirve para indicar que los atributos son del objeto que está
invocando al método.
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
De esta forma, cuando se invoque al constructor, se deberán dar los valores como
argumentos. En este ejemplo, las líneas de código para crear un objeto, al tiempo que se le
asignan valores a los atributos, se muestran a continuación.
Persona p1 = new Persona("Juan Perez","Azucenas #12","12345678",28);
Persona p2 = new Persona("Ana Lopez","Cipreses #45","87654321",24);
Una vez asignados valores a los atributos, ahora se desplegarán en pantalla todos estos
datos, por lo que dentro de main, agregaremos unas líneas de impresión en pantalla.
System.out.println("\n\nDatos de p1:");
System.out.println("Nombre: "+p1.nombre);
System.out.println("Direccion: "+p1.direccion);
System.out.println("Telefono: "+p1.telefono);
System.out.println("Edad: "+p1.edad);
System.out.println("\n\nDatos de p2:\nNombre: "+p2.nombre+"\nDireccion:
"+p2.direccion+"\nTelefono: "+p2.telefono+"\nEdad: "+p2.edad);
Nótese que las primeras 5 líneas, despliegan los datos de la persona 1, mientras que la sexta
despliega los datos de la persona2, esto con el objeto de observar que cuando se manda a
imprimir algo, lo que se hace es concatenar cadenas, estas cadenas pueden ser variables o
segmentos de texto entre un par de comillas, y el signo +, es el que hace la concatenación.
Cabe destacar, que cuando se va a hacer referencia a algún atributo o método de un objeto,
se debe poner el nombre del objeto seguido de un punto, y luego el nombre del atributo o
método al que hace referencia.
Ahora sólo falta agregarle algunas líneas de impresión a cada método para mandar llamar a
los métodos y ver qué hacen los objetos. El código completo queda de la siguiente forma:
public class Persona{
/*Se define un constructor explícito*/
public Persona(String nom, String dir, String tel, int ed){
System.out.println("Creando un objeto");
this.nombre = nom;
this.direccion = dir;
this.telefono = tel;
this.edad = ed;
}
/*Se declaran atributos*/
String nombre;
String direccion;
String telefono;
int edad;
/*Método main de la clase*/
public static void main(String args[]){
/*Se crean los 2 objetos*/
Persona p1 = new Persona("Juan Perez","Azucenas #12","12345678",28);
Persona p2 = new Persona("Ana Lopez","Cipreses #45","87654321",24);
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
/*Se manda a imprimir la información de cada objeto*/
System.out.println("\n\nDatos de p1:");
System.out.println("Nombre: "+p1.nombre);
System.out.println("Direccion: "+p1.direccion);
System.out.println("Telefono: "+p1.telefono);
System.out.println("Edad: "+p1.edad);
System.out.println("\n\nDatos de p2:\nNombre: "+p2.nombre+
"\nDireccion: "+p2.direccion+"\nTelefono: "+
p2.telefono+"\nEdad: "+p2.edad);
/*Se llaman a los métodos con alguno de los objetos*/
p1.caminar();
p2.hablarPorTelefono();
p1.correr();
}
/*Se declaran los métodos*/
public void caminar(){
System.out.println(this.nombre+" se fue a caminar");
}
public void correr(){
System.out.println(this.nombre+" se fue a correr");
}
public void hablarPorTelefono(){
System.out.println(this.nombre+" esta hablando por telefono");
}
}
Otro concepto de gran importancia en la programación orientada a objetos es:
•
Herencia: Permite el acceso a atributos y métodos de una clase desde otra. Visto en
una jerarquía de clases, se dice que las subclases heredan de las superclases. Una
superclase puede tener varias subclases, pero una subclase solo puede tener una
superclase. Vea el siguiente diagrama.
Ejemplo 3
Elaborar un programa que maneje los datos de un Empleado. Considere que el Empleado es
una Persona y que además de tener los datos de Persona contiene datos propios de su
condición de Empleado como lo son: clave de empleado, sueldo y puesto. Las actividades
de empleado serán: atender a cliente y contactar a proveedores.
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
a) Leer y analizar el enunciado.
Como el Empleado es una Persona y debe contener los datos o atributos de ésta, entonces
Empleado hereda de Persona. Para manipular los datos de Empleado se debe crear un
objeto de este tipo ya que contiene datos y actividades adicionales a Persona.
b) Identificar las clases a utilizar.
Con base en el análisis, el Empleado es una subclase de la superclase Persona. Por lo que
en este problema se contemplan dos clases: Persona y Empleado.
c) Para cada clase definir atributos y métodos.
Para la clase Empleado se necesitan los siguientes atributos y métodos.
Atributos:
1) nombre, direccion, telefono, edad: estos atributos ya se encuentran en Persona.
2) claveEmpleado
3) sueldo
4) puesto
Métodos:
atendiendoACliente()
contactandoAProveedores()
d) Elaborar el diagrama de clases.
En el diagrama se presenta la clase Empleado y se toma la clase Persona del ejemplo
anterior. La línea flechada que une a las dos clases indica que empleado usa los atributos y
métodos de Persona.
El código base de la clase Empleado se muestra a continuación
public class Empleado{
String claveEmpleado;
double sueldo;
String puesto;
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
public static void main(String args[]){
}
public void atendiendoACliente(){
}
public void contactandoAProveedores(){
}
}
Con este código, solamente se está definiendo una clase llamada Empleado, pero todavía no
se le heredan los atributos y métodos de Persona. Para hacer que la clase Empleado sea una
subclase de Persona, se utiliza la palabra extends, quedando el código como sigue.
public class Empleado extends Persona{
String claveEmpleado;
double sueldo;
String puesto;
public static void main(String args[]){
}
public void atendiendoACliente(){
}
public void contactandoAProveedores(){
}
}
Cabe hacer notar que cuando se utilizan clases para hacer subclases, no deben existir
constructores explícitos. Además, la superclase puede no tener método main. Quitando el
constructor y el método main del código del ejemplo anterior:
public class Persona{
/*Se declaran atributos*/
String nombre;
String direccion;
String telefono;
int edad;
/*Se declaran métodos*/
public void caminar(){
System.out.println(this.nombre+" se fue a caminar");
}
public void correr(){
System.out.println(this.nombre+" se fue a correr");
}
public void hablarPorTelefono(){
System.out.println(this.nombre+" esta hablando por telefono");
}
}
Ahora, en el código de la clase Empleado, hay que agregar en el método main, unas líneas
para crear el objeto, asignarle valores a sus atributos, y mandar llamar a los métodos de
hablarPorTelefono() y contactandoAProveedores(). Por lo que el código final queda de la
siguiente forma:
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
public class Empleado extends Persona{
String claveEmpleado;
double sueldo;
String puesto;
public static void main(String args[]){
/*Se crea un objeto de tipo Empleado*/
Empleado e = new Empleado();
/*Se asignan valores a los atributos heredados*/
e.nombre = "Arturo Martinez";
e.direccion = "Siempreviva #83";
e.telefono = "98745632";
e.edad = 23;
/*Se asignan valores a los atributos propios de la clase*/
e.claveEmpleado = "ArMart65874";
e.sueldo = 4532.80;
e.puesto = "Capturista";
/*Desplegamos los valores asignados en pantalla*/
System.out.println("Nombre: "+e.nombre+"\nDireccion: "
+e.direccion+"\nTelefono: "+e.telefono);
System.out.println("Edad: "+e.edad+"\n\nClave de empleado: "
+e.claveEmpleado+"\nPuesto: "+e.puesto);
/*Se mandan llamar a algunos métodos*/
e.hablarPorTelefono();
e.contactandoAProveedores();
}
/* se definen los métodos propios del cliente */
public void atendiendoACliente(){
System.out.println(this.nombre+" esta atendiendo a un cliente");
}
public void contactandoAProveedores(){
System.out.println(this.nombre+" esta contactando proveedores");
}
}
Si se compila y ejecuta este código se observa una salida como la siguiente:
Nombre: Arturo Martinez
Direccion: Siempreviva #83
Telefono: 98745632
Edad: 23
Clave de Empleado: ArMart65874
Puesto: Capturista
Arturo Martinez esta hablando por telefono
Arturo Martinez esta contactando proveedores
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
Cómo compilar y ejecutar un programa de JAVA
Lo primero que hay que hacer es guardar el código fuente con el mismo nombre de la clase,
y además con extensión java, por ejemplo si la clase es HolaMundo, el nombre del archivo
deberá ser HolaMundo.java.
Ahora debemos abrir una ventana del sistema y desplazarnos por las carpetas hasta
ubicarnos en donde se encuentren los programas.
Para compilar usamos la instrucción javac. Por ejemplo, para compilar el programa
HolaMundo.java, debemos escribir la siguiente instrucción:
>javac HolaMundo.java
Si el programa no tiene errores, regresará el símbolo del sistema. Con esto hemos generado
el archivo HolaMundo.class.
Ahora para ejecutar, usaremos la instrucción java de la siguiente forma:
>java HolaMundo
Cabe hacer notar que para ejecutar, no es necesario escribir la extensión class.
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (PARTE I)
EJERCICIOS PROPUESTOS
1. Se tiene el siguiente código:
public class OperacionesMatematicas{
int i;
float f;
double d,rd;
public static void main(String args[]){
OperacionesMatematicas om = new OperacionesMatematicas();
om.i = 2;
om.f = 10/3;
om.d = 2673.8426;
om.rd = i*f*d;
System.out.println("El resultado almacenado en rd es: "+rd);
}
}
¿Compila correctamente? ¿Qué errores aparecen?
Corrija dichos errores, sin mover de posición los atributos de la clase, y verifique que se
ejecute correctamente.
NOTA: Si se cambian valores en los atributos, específicamente para f, si pone un número
como 25.89, se debe hacer un cast explícito, es decir debe anteponer (float) al número que
se va a utilizar. Quedando de la siguiente forma:
om.f = (float)25.89;
2. Investigue, ¿qué es un cast entre tipos de dato? Y explique, ¿cuándo se debe hacer
explícito?
3. Implemente una clase llamada Punto2D, la cual almacene en sus atributos las
coordenadas de un punto en un plano XY, y defina un método para desplegar en
pantalla dichas coordenadas.
4. Implemente una clase llamada Punto3D, la cual almacene las coordenadas de un
punto en un espacio XYZ. Tenga en cuenta que la clase Punto2D deberá ser la
superclase de Punto3D. También deberá contar con un método de impresión de las
coordenadas del punto.
5. Implemente una clase llamada Computadora, proponga por lo menos 5 atributos, un
atributo extra que indicará el estado de la computadora, si está encendida o apagada.
Deberá tener 3 métodos, uno para prender la computadora, otro para apagar la
computadora, y otro que indique que se está trabajando en la computadora. Tenga
en cuenta que para el método donde se está trabajando en la computadora, no se
puede trabajar si está apagada. El estado inicial de la computadora es apagada.
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
Descargar