Sie sind auf Seite 1von 18

CAPITULO N° 02:

PROGRAMACIÓN ORIENTADA A OBJETOS


Página | 2

En esta unidad académica se estudia en detalle la Programación orientada a Objetos. Como es


sabido hay muchos lenguajes de programación orientada a objetos – POO que tienen muchas
similitudes entre sí, pero puntualmente nos enfocaremos en Java.

La programación orientada a objetos es otra técnica para implementar el famoso dicho “divide
y vencerás”. La idea es encapsular datos y métodos en objetos, de forma que cada objeto sea
semiautónomo, encerrando métodos y datos privados o internos. De esta forma, el objeto
puede interactuar con el resto del programa por medio de una interfaz bien definida por sus
métodos públicos, es decir, invocando sus métodos desde fuera del objeto.

Entonces se entiende como POO que es un método de implementación en el que los programas
se organizan como colecciones cooperativas de objetos, cada uno de los cuales representan
una instancia de alguna clase, y cuyas clases son todos miembros de una jerarquía de clases
unidas mediante relaciones de herencia.

2.1. CLASE
Una clase es como una plantilla de la cual se pueden crear varios objetos con las mismas
características y funciones (métodos).

Una clase es una representación de un objeto en particular, y define un nuevo tipo de


dato. Las clases de utilizan para crear objetos de ese tipo de clase en particular.

Diagrama de una Clase

Nombre de Clase

Atributos Definición de las variables de instancia de la clase

Métodos Definición de las operaciones Implementadas

Figura 01: Diagrama de notación UML


Ejemplo:

Página | 3

Figura 02: Ejemplo de una clase en notación UML

 El nombre de toda clase debe comenzar con mayúsculas


 El nombre de los objetos con minúsculas

2.2. CREACIÓN DE UNA CLASE EN JAVA


Para crear una clase se utiliza la palabra reservada class y a continuación el nombre de la
clase. La definición de la clase se pone entre las llaves de apertura y cierre. El nombre de
la clase empieza con una letra mayúscula.

Sintaxis:
Tipo de acceso class NombreClase {
Variable1;
Variable2;
//….

Método (lista de parámetros) {


Cuerpo del método
}

//métodos adicionales
}
Ejemplo:
class CAlumno {
Cuerpo de la clase
}

Página | 4
2.3. OBJETO
Objeto es una instancia de la clase, los objetos tienen las siguientes cualidades:
 Identidad: los objetos se distinguen del uno del otro.
 Comportamiento: pueden realizar tareas.
 Estado: almacena información que varía a través del tiempo).

alumno1

nombre = “Juan Pérez”


nota1 = 15
nota2 = 13
nota3 = 18

CAlumno()
getNombre()
setNombre(String nombre)
getNota1()
setNota1(int nota1)
getNota2()
setNota2(int nota2)
getNota3()
setNota3(int nota3)
promedio()

Figura 03: Representación en UML de esta clase de objetos.

alumno1 puede ser un subconjunto o una especialización de otro objeto más genérico,
tal como Alumno.

2.4. DECLARACIÓN DE OBJETOS


Para crear un objeto o una instancia de esta clase tenemos dos alternativas, la primera
en la misma línea de declaración, tal como se ilustra a continuación.

Sintaxis 1:
NombreClase NombreVariable;
NombreVariable = new NombreClase( );
Sintaxis 2:
NombreClase NombreVariable = new NombreClase( );

Ejemplo:
El objeto alumno1 implementado en Java, sería el siguiente. Página | 5
CAlumno alumno1 = new CAlumno();

Ejemplo:
El objeto alumno1 implementado en Java, sería el siguiente.
CAlumno alumno1;
alumno1= new CAlumno();

2.5. ATRIBUTOS
Los atributos son las características individuales que diferencian un objeto de otro y
determinan su apariencia, estado u otras cualidades. Los atributos se guardan en variables
denominadas de instancia, y cada objeto particular puede tener valores distintos para
estas variables.

Las variables de instancia también denominados miembros dato, son declaradas en la


clase pero sus valores son fijados y cambiados en el objeto.

Sintaxis:
[TipoAcceso] Tipo Nombre;

Ejemplo:
private String nombre;
private int Nota1;
private Punto punto;

2.6. Métodos – Comportamiento


El comportamiento de los objetos de una clase se implementa mediante funciones
miembro o métodos. Un método es un conjunto de instrucciones que realizan una
determinada tarea y son similares a las funciones de los lenguajes estructurados.

Del mismo modo que hay variables de instancia y de clase, también hay métodos de
instancia y de clase. En el primer caso, un objeto llama a un método para realizar una
determinada tarea, en el segundo, el método se llama desde la propia clase.
Sintaxis
[modificador] tipo NombreMetodo(tipo parm1, tipo parm2, . . .) {
declaraciones de variables locales;
sentencias;
//... Página | 6
[return[ ( ] expresión[ ) ] ];
}

Ejemplo:
public double promedio(){
return(nota1 + nota2 + nota3)/3;
}

2.7. CASO DE ESTUDIO


Enunciado 01:
Realice una aplicación implementando clases y creando objetos que halle el área de un
cuadrado de una cantidad dada. Además realizar el listado de requerimientos funcionales.
Solución:
Realice lo siguiente:
1. Realizar el diseño de la clase que intervienen en la solución del problema.
2. Explique el listado de requerimientos

Nombre : R1 – Hallar el área de un cuadrado


Resumen : Muestra la información del área de un cuadrado
Entradas :
Ingresar el lado del cuadrado
Resultados :
Muestra la información del área de un cuadrado en formato decimal.

3. Crear un proyecto con el Nombre: Aplica01.


4. Crear un paquete con el nombre de Clases

Página | 7
5. En el paquete Clases, realice clic con el botón derecho del mouse, para crear una
nueva clase Java Class, de nombre: Cuadrado y realizar la codificación.

6. En el paquete Clases, realice clic con el botón derecho del mouse, para agregar un
nuevo JFrame, Aplica01 – New – JFrame. Escriba el Nombre Problema01.

7. Agregue los controles necesarios como en el gráfico 01

Gráfico 01
8. Escribir el código para la clase Cuadrado definido anteriormente, teniendo en
cuenta los atributos y métodos que se utilizan
package Clases;

public class Cuadrado { Página | 8

private float lado;

public Cuadrado() {
}

public float getLado() {


return lado;
}

public void setLado(float lado) {


this.lado = lado;
}

public float hallarArea() {


float area;
area = (float) Math.pow(lado, 2);
return area;
}

public float mostrarArea() {


return hallarArea();
}
}

9. Escribir el código para la clase Problema01 definido anteriormente, teniendo en


cuenta los atributos y métodos que se utilizan
package Clases;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import javax.swing.JOptionPane;

public class Problema01 extends javax.swing.JFrame {

Cuadrado cua = new Cuadrado();

public Problema01() {
initComponents();
formulario();
valIniciales();
}

private void formulario() {


this.setTitle("Area de un cuadrado");
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setSize(new Dimension(330, 160));
this.setResizable(false);
this.getContentPane().setBackground(new Color(255,
255, 255)); Página | 9
this.PanelIngreso.setBackground(new Color(255, 255, 255));
this.PanelOperaciones.setBackground(new Color(255,
255, 255));
}

private void valIniciales() {


PanelIngreso.setVisible(true);
PanelOperaciones.setVisible(true);
PanelResultado.setVisible(false);
btnCalcular.setEnabled(false);
btnNuevo.setEnabled(false);
btnSalir.setEnabled(true);
}

private void btnCalcularActionPerformed


(java.awt.event.ActionEvent evt) {
float lado;

if (txtLado.getText().isEmpty()) {
JOptionPane.showMessageDialog(this,
"Ingrese un Valor");
txtLado.requestFocus();
btnCalcular.setEnabled(false);
} else {
lado = Float.parseFloat(txtLado.getText().trim());
cua.setLado(lado);
cua.hallarArea();
txtArea.setText(String.valueOf(cua.mostrarArea()));
this.setSize(new Dimension(330, 220));
PanelResultado.setVisible(true);
btnCalcular.setEnabled(false);
btnNuevo.setEnabled(true);
this.PanelResultado.setBackground(new Color(255,
255, 255));
}
}

private void btnNuevoActionPerformed


(java.awt.event.ActionEvent evt) {
txtLado.setText("");
txtArea.setText("");
this.setSize(new Dimension(330, 170));
PanelResultado.setVisible(false);
txtLado.requestFocus();
btnCalcular.setEnabled(true);
btnNuevo.setEnabled(false);
}
private void btnSalirActionPerformed
(java.awt.event.ActionEvent evt) {
int r = JOptionPane.showOptionDialog(this,
"Estas Seguro de Salir ...?", "Area Cuadrado",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, new Object[]{"Si Salgo", "No Salgo"}, Página | 10
"No Salgo");
if (r == 0) {
System.exit(0);
}
}

private void txtLadoKeyTyped(java.awt.event.KeyEvent evt) {


btnCalcular.setEnabled(true);
char c = evt.getKeyChar();
if (!Character.isDigit(c)) {
evt.consume();
}
}

private void txtLadoActionPerformed


(java.awt.event.ActionEvent evt) {
btnCalcular.doClick();
txtLado.setText("");
txtLado.requestFocus();
}

private void formWindowActivated


(java.awt.event.WindowEvent evt) {
valIniciales();
}

private void txtLadoKeyPressed(java.awt.event.KeyEvent evt) {


if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
btnCalcular.doClick();
} else {
btnCalcular.setEnabled(false);
txtLado.requestFocus();
}
}
}
Enunciado 02:
Se requiere una aplicación que diseñe una clase CAlumno; que permita leer los datos de
un alumno (nombre) y tres notas y nos permite visualizar.
 Los datos del alumno,
 sus notas y el promedio de las notas ingresadas. Página | 11

Además realizar los requerimientos funcionales de cada uno de los requerimientos.

CAlumno

public class CAlumno {


String nombre;
double nota1;
double nota2;
double nota3;

public CAlumno() {

public String getNombre() {


return nombre;
}

public void setNombre(String nombre)


{
this.nombre = nombre;
}

}
Solución
1. Listado de Requerimientos funcionales
Nombre : R1 – Leer los datos del alumno
Resumen : Lee la información de los datos del alumno
Entradas :
Ingresar los datos de un alumno
Resultados :
Captura la información de los datos del alumno (validado)

2. Realizar los demás requerimientos funcionales (como ejercicio). Página | 12


3. Crear el proyecto – EjemploPOO, y un paquete Aplicación, como en la figura.

4. Definir la clase – CAlumno.java, como en la figura

5. Escribir el código para la clase CAlumno definido anteriormente, teniendo en cuenta los
atributos y métodos que se utilizan

Clase CAlumno.java
public class CAlumno {
String nombre;
int nota1, nota2, nota3;

public CAlumno() {

public String getNombre() {


return nombre;
}

public void setNombre(String nombre) {


this.nombre = nombre;
}

public int getNota1() {


return nota1;
}

public int getNota2() {


return nota2;
}
public int getNota3() {
return nota3;
}

public void setNota1(int nota1) {


this.nota1 = nota1;
} Página | 13
public void setNota2(int nota2) {
this.nota2 = nota2;
}

public void setNota3(int nota3) {


this.nota3 = nota3;
}

public double promedio(){


return(nota1 + nota2 + nota3)/3;
}
}

6. Ahora crear una aplicación JFrame – AplicaAlumno, que nos permitirá utilizar la clase
CAlumno.

7. Luego realizar el diseño de la clase AplicaAlumno.java, como en la figura.


8. A continuación realizar el código para el formulario diseñado anteriormente.

Clase AplicaAlumno.java
package Aplicación;

import java.awt.Color; Página | 14


import java.awt.event.KeyEvent;

public class AplicaAlumno extends javax.swing.JFrame {

private final int limite = 2; Longitud máxima del dato Ingresado. en las
notas
CAlumno a1 = new CAlumno(); //Creando un objeto a1

public AplicaAlumno() {
initComponents();
formulario();
}

private void formulario() {


this.setTitle("Promedio Notas");
this.getContentPane().setBackground(new Color(255, 255,
255));
this.pnlOpciones.setBackground(new Color(255, 255,
255));
this.setLocationRelativeTo(this);
this.setVisible(true);
this.setResizable(false);
this.setLayout(null);
pnlNotas.setOpaque(false);
this.txtNombre.requestFocus();
}

private void borrar(){


txtNombre.setText("");
txtNota1.setText("");
txtNota2.setText("");
txtNota3.setText("");
txtSalida.setText("");
txtNombre.requestFocus();
}

//Código del botón btnCalcular


private void btnCalcularrActionPerformed
(java.awt.event.ActionEvent evt) {
double prom;

a1.setNombre(txtNombre.getText());
a1.setNota1(Integer.parseInt(txtNota1.getText()));
a1.setNota2(Integer.parseInt(txtNota2.getText()));
a1.setNota3(Integer.parseInt(txtNota3.getText()));
prom = a1.promedio();

txtSalida.setText("\tResultados\n");
txtSalida.append("\t==========\n");
txtSalida.append("Nombre : ");
txtSalida.append("\t" + a1.getNombre() + "\n");
txtSalida.append("Notas : "); Página | 15
txtSalida.append("\t" + a1.getNota1() + ", ");
txtSalida.append(a1.getNota2() + ", ");
txtSalida.append(a1.getNota3() + "\n");
txtSalida.append("Promedio : ");
txtSalida.append("\t" + String.valueOf(prom)+"\n");
}

//Código para que en el ingreso de las notas solo se acepten números y como máximo dos
caracteres
private void txtNota1KeyTyped
(java.awt.event.KeyEvent evt) {
char car = evt.getKeyChar();
if(car < '0' || car > '9')
evt.consume();

if (txtNota1.getText().length()== limite)
evt.consume();

private void txtNota2KeyTyped


(java.awt.event.KeyEvent evt) {
char car = evt.getKeyChar();
if(car < '0' || car > '9')
evt.consume();
if (txtNota2.getText().length()== limite)
evt.consume();
}

private void txtNota3KeyTyped


(java.awt.event.KeyEvent evt) {
char car = evt.getKeyChar();
if(car < '0' || car > '9')
evt.consume();
if (txtNota3.getText().length()== limite)
evt.consume();
}

//Código para que en el ingreso del nombre solo se acepten carcateres y la barra espaciadora
private void txtNombreKeyTyped
(java.awt.event.KeyEvent evt) {
char car = evt.getKeyChar();
if((car < 'a' || car > 'z') &&
(car < 'A' || car > 'Z')
&& (car != (char)KeyEvent.VK_SPACE))
evt.consume();
}

private void btnNuevoActionPerformed


(java.awt.event.ActionEvent evt) {
borrar();
} Página | 16

private void btnSalirActionPerformed


(java.awt.event.ActionEvent evt) {
System.exit(0);
}
}

El operador de acceso a un miembro (.) selecciona un miembro individual de un


objeto de la clase.

Actividad 01
Desarrollar una solución que permita realizar el cálculo del pago mensual del sueldo de un
empleado de la empresa “Comerciantes Unidos”. Dicho cálculo se realiza de la siguiente
manera, el sueldo básico se calcula en función al número total de horas trabajadas, basado en
una tarifa horaria.
Al sueldo básico se le aplica una bonificación del 35% obteniéndose el sueldo bruto. Al sueldo
básico se le aplica un descuento del 12% obteniéndose el sueldo neto. Mostrar el sueldo básico,
el sueldo bruto y el sueldo neto de un trabajador.

Actividad 02
Desarrollar una solución que permita calcular y mostrar el costo total que representa los
pacientes de un hospital de acuerdo al tipo de enfermedad, según los datos de la tabla.

Adicionalmente debe considerar que los pacientes menores de 18 años implican un costo
adicional de 35% y las mujeres que tiene la enfermedad tipo 1, implican un costo adicional de
12%. Valide la entrada de los datos.

Enfermedad Tipo Costo Diario por paciente


1 135

2 323

3 425

4 678
Actividad 03
Desarrollar una solución que permita calcular y mostrar el costo total en nuevos soles que
representa un paciente para un hospital de acuerdo al tipo de enfermedad, según los datos de
la tabla. Página | 17

Adicionalmente, debe considerar que las mujeres tienen un incremento del 19% para el primer
tipo de enfermedad y los hombres tienen un aumento del 4% para el tercer tipo.

Enfermedad Tipo Costo Diario


1 180

2 420

3 513

Los resultados se deben mostrar tanto en números como en letras.

Actividad 04
En el Instituto del Sur, los alumnos están categorizados en cuatro categorías. A cada categoría
le corresponde una pensión mensual distinta dada en la siguiente tabla:

Categoría Pensión
A S/. 550
B S/. 500

C S/. 460

D S/. 400

Semestralmente, el Instituto del Sur efectúa rebajas en las pensiones de sus estudiantes a partir
del segundo ciclo en base al promedio ponderado del ciclo anterior en porcentajes dados en la
tabla siguiente:

Promedio Descuento Promedio Descuento


0 a13.99 No hay descuento
14.00 a 15.99 10 %
16.00 a 17.99 12 %
18.00 a 20.00 15 %
Diseñe una aplicación que determine cuánto de rebaja recibirá un estudiante sobre su pensión
actual y a cuánto asciende su nueva pensión. Los resultados se deben mostrar tanto en
números como en letras.

Página | 18
Actividad 05
Se desea crear una aplicación que permita manejar el inventario de una tienda, conocer cuánto
dinero hay en caja y tener un control de estadísticas de ventas.
La tienda maneja cuatro productos. De cada uno de ellos se maneja la siguiente información:
 Nombre. No pueden haber dos productos con el mismo nombre.
 Tipo (puede ser un producto de papelería, supermercado o droguería).
 Cantidad actual del producto en la tienda (número de unidades disponibles para la
venta que hay en bodega.
 Cantidad mínima para abastecimiento (número de productos por debajo del cual se
puede hacer un nuevo pedido al proveedor).
 Precio base de venta por unidad.
Para calcular el precio final de cada producto, se deben sumar los impuestos que define la ley
(IGV). Dichos impuestos dependen del tipo del producto, de la siguiente manera:
 Papelería: 16%
 Supermercado: 4%
 Droguería: 12%.
Eso quiere decir que si un lápiz tiene un precio base de S/.10, el precio final será de S/.11,6
considerando que un lápiz es un producto de papelería, y sobre estos se debe pagar el 16% de
impuestos.
El programa debe permitir al usuario:
1. Visualizar la información de los productos.
2. Vender un producto.
3. Abastecer la tienda con un producto.
4. Cambiar un producto.
5. Calcular estadísticas de ventas:
a) El producto más vendido.
b) El producto menos vendido.
c) La cantidad total de dinero obtenido por las ventas de la tienda.
d) La cantidad de dinero promedio obtenido por unidad de producto vendida.

Das könnte Ihnen auch gefallen