Coruniversitaria, Corporación Universitaria de Ibagué
Facultad de Ingeniería de Sistemas

Estructuras de Programación

Inicio

Generalidades

Ejercicios

Talleres

Proyecto

 

 Introducción a la Programación Orientada a Objetos

 Vivimos en un mundo de objetos. Sólo mire a su alrededor: Existen automóviles, motocicletas, motores, computadores, teléfonos, barcos, aviones, carreteras, semáforos, puentes, empresas, gente, animales, edificios,  ascensores y muchas otras cosas.  De hecho, casi cualquier sustantivo puede representarse razonablemente como un objeto. Los objetos son entidades con estructura y estado. Cada objeto define operaciones que pueden acceder a ese estado y manipularlo.

 La Programación Orientada a Objetos es un paradigma muy importante en el desarrollo de software contemporáneo. En la POO, las estructuras de datos y los algoritmos se integran en bloques o unidades llamadas Clases. En realidad, la tecnología de objetos es un esquema de compactación que permite crear unidades útiles de software.

 Las clases constan de dos partes: La especificación y la implementación. La especificación le dice al usuario de la clase lo que hace la clase; la implementación lo hace.

 ___________________________________________________________________________________________

 La siguiente es la forma de representar gráficamente una Clase en UML (Lenguaje de Modelado Unificado): Un rectángulo dividido en tres secciones.

Notación gráfica de una Clase

Ejemplo de una Clase

Las Clases
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir que nuestro objeto celular es una instancia de una clase conocida como "celular". Los celulares tienen características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.).

http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_tres.gif

Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares comparten esas características comunes y construyen modelos o plantillas comunes, para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o plantilla le llamamos CLASE, y a los equipos que sacamos a partir de ella la llamamos OBJETOS.
http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_cuatro.gif
Esto mismo se aplica a los objetos de software, se pueden tener muchos objetos del mismo tipo y mismas características.
Definición teórica: La clase es un modelo o prototipo que define las variables y métodos comunes a todos los objetos de cierta clase. También se puede decir que una clase es una plantilla genérica para un conjunto de objetos de similares características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad no existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más general, pero los objetos y las instancias son ambas representación de una clase.

Definición Teórica: Una instancia es un objeto de una clase en particular.

Herencia
La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia.
Por ejemplo, imaginemos que estamos haciendo el análisis de un Sistema para una tienda que vende y repara equipos celulares.

http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_cinco.gif
En el gráfico vemos 2 Clases más que posiblemente necesitemos para crear nuestro Sistema. Esas 2 Clases nuevas se construirán a partir de la Clase Celular existente. De esa forma utilizamos el comportamiento de la SuperClase.
En general, podemos tener una gran jerarquía de Clases tal y como vemos en el siguiente gráfico:

http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_seis.gif

Envío de Mensajes

Un objeto es inútil si está aislado. El medio empleado para que un objeto interactúe con otro son los mensajes. Hablando en términos un poco más técnicos, los mensajes son invocaciones a los métodos de los objetos.

 Programación Orientada a Objetos en Java

  El lenguaje Java tiene una sintaxis similar a la de C++ (que a su vez tiene una sintaxis similar a la de C). Con ellos, cada uno ha tratado de ganarse a los adeptos del lenguaje precedente. Pero, para ser justos, hay que decir que Java, aunque tiene el mismo 'look', es mucho más simple que C++.  Por ejemplo, al eliminar los apuntadores se eliminan los atormentadores y estresantes  * y &.

// Un primer programa en Java: Imprimir texto
// Autor: Usted
// Fecha: 22/08/2004
// Cómo mostrar texto en un cuadro de diálogo
// Paquetes de Java (Colección de clases o bibliotecas)
import javax.swing.JOptionPane; // El programa usa la clase JOptionPane

public class Ventana{

// El método main empieza la ejecución del programa en Java
public static void main(String arg []){

JOptionPane.showMessageDialog( null, "Hola, mis pupilos!\nBienvenidos al mundo Java!!");
System.exit(0); // Terminar el programa con la ventana
} // Fin del método main
} // Fin de la clase Ventana

------------------------------------------------------------------------------------

// Un programita para multiplicar enteros
import javax.swing.JOptionPane; // Importa la clase JOptionPane

public class Prodent{

// El método main empieza la ejecución del programa en Java
   public static void main(String arg []){
     String primernum, segundonum;
     int num1,num2,prod;
// Lee el primer número del usuario como una cadena
     primernum=JOptionPane.showInputDialog("Digite el primer entero: ");
// Lee el segundo número del usuario como una cadena
     segundonum=JOptionPane.showInputDialog("Digite el segundo entero: ");
// Convierte los números del tipo String a tipo int
     num1 = Integer.parseInt(primernum);
     num2 = Integer.parseInt(segundonum);
// Multiplica los números
     prod = num1 * num2;
// visualiza el producto en una ventana
     JOptionPane.showMessageDialog(null,"El producto es "+prod, "Resultados ",JOptionPane.PLAIN_MESSAGE);
     System.exit(0); // Terminar el programa con la ventana
   } // Fin del método main
} // Fin de la clase Prodent

 Modificar el programa anterior para permitir otras operaciones aritméticas (suma, resta, división, división residuo, potencia, raiz cuadrada...). Utilizar los metodos de la clase Math (sqrt( ), pow( )...)

------------------------------------------------------------------------------------

// Empleado.java
// Creación y uso de un objeto de la clase Empleado

import java.io.*;

public class Empleado{
private String nombre;
private float sueldo;

public void setDatos(String nombre, float sueldo){
this.nombre = nombre;
this.sueldo = sueldo;
}
public void getDatos(){
System.out.println("\nNombre del empleado: "+nombre);
System.out.println("Sueldo : $"+sueldo);
}

public static void main(String arg[]) throws IOException{
Empleado emp = new Empleado();
String nombre;
float sueldo;
String sue;
BufferedReader e;
System.out.println("Por favor, digite los datos del empleado:");
e = new BufferedReader(new InputStreamReader(System.in));
System.out.print("\nNombre? ");
nombre = e.readLine();
System.out.print("Sueldo? $");
sue = e.readLine();
sueldo = java.lang.Float.parseFloat(sue);
emp.setDatos(nombre,sueldo);
emp.getDatos();
}
}

------------------------------------------------------------------------------------

 Modificar el programa Empleado.java, codificando su entrada y salida en modo grafico con la clase JOptionPane. Implementar un metodo para calcular aumento del  sueldo (10%).

  <>.  Escriba un Programa Orientado a Objetos en Java para crear la  clase Factura. Definir los métodos que permitan leer, visualizar y calcular el IVA de una instancia de Factura. Aplicar la propiedad de abstracción.

------------------------------------------------------------------------------------

class DivisionPorCero extends Exception{

DivisionPorCero(String msg){

super(msg);
}
}

public class Division{

public void division1(){

int num1 = 10;
int num2 = 3;

try{

if(num2==0) throw new DivisionPorCero("/ by 0");
System.out.println(num1 + " / " + num2 + " = " + (num1/num2));

}

catch(DivisionPorCero e){

System.out.println("Muerte con " + e);

}

finally{

System.out.println("Se termino el final");
}
System.out.println("Retorno al principal");
}

public static void main (String arg []){

new Division().division1();
System.out.println("Retornando al main");
}
}

------------------------------------------------------------------------------------

public class Temperatura{

public static void main(String args []){

double faren = 62.5;
double celcius = f2c (faren);
System.out.println(faren + " F = " + celcius + " C");

}

static double f2c(double f){

return (f - 32) * 5/9;
}
}

------------------------------------------------------------------------------------

// Micirculo.java
// Compilacion separada de la clase Micirculo. Al compilar,
// el archivo .class se graba en mipaquete
package mipaquete;
public class Micirculo{

double radio;
public Micirculo(double radio){
this.radio=radio;
}

public double areac(){
double area = 0.0;
area=radio*radio*Math.PI;
return area;
}
}

------------------------------------------------------------------------------------

package mipaquete;
import java.io.*;
import mipaquete.*;
public class Micirculoppal{

double altura;
Circulo c;

void setdatos(double altura,double radio){
this.altura=altura;
c=new Micirculo(radio);
}

double volumen(){
double vol=0.0;
vol=altura*c.radio*c.radio*Math.PI;
return vol;
}
public static void main(String arg[]){

Area1 q=new Area1();
int fondo,x,y;
InputStreamReader en = new InputStreamReader(System.in);
BufferedReader entrada = new BufferedReader(en);
String r="";
System.out.println("Por favor digite la altura ... ");
System.out.flush();
try{
r = entrada.readLine();
}
catch(IOException e)
{
System.out.println("Hay un error de lectura... ");
}
x=Integer.parseInt(r);
System.out.println("Por favor digite la base ... ");
System.out.flush();
try{
r = entrada.readLine();
}
catch(IOException e)
{
System.out.println("Hay un error de lectura... ");
}
y=Integer.parseInt(r);
System.out.println("Por favor digite el fondo ... ");
System.out.flush();
try{
r = entrada.readLine();
}
catch(IOException e)
{
System.out.println("Hay un error de lectura... ");
}
fondo=Integer.parseInt(r);
q.setValores(fondo,x,y);
double fin=0.0;
fin=q.calculo();
System.out.println("El area del objeto es... "+fin);
System.exit(0);

}
}

------------------------------------------------------------------------------------

// Micilindro.java
// importa el archivo Micirculo.class desde mipaquete
package mipaquete;
import java.io.*;
import java.text.DecimalFormat;
import mipaquete.*;
public class Micilindro{

double altura;
Micirculo c;

void setdatos(double altura,double radio){
this.altura=altura;
c=new Micirculo(radio);
}

double volumen(){
double vol=0.0;
vol=altura*c.radio*c.radio*Math.PI;
return vol;
}
public static void main(String arg[]){

Micilindro cil=new Micilindro();
double altura,radio;
InputStreamReader ent = new InputStreamReader(System.in);
BufferedReader flujoe = new BufferedReader(ent);
String r="";
System.out.println("Por favor digite el radio ... ");
System.out.flush();
try{
r = flujoe.readLine();
}
catch(IOException e)
{
System.out.println("Hay un error de lectura... ");
}
radio=Double.parseDouble(r);
System.out.println("Por favor digite la altura ... ");
System.out.flush();
try{
r = flujoe.readLine();
}
catch(IOException e)
{
System.out.println("Hay un error de lectura... ");
}
altura=Double.parseDouble(r);
cil.setdatos(altura,radio);
double v=0.0;
v=cil.volumen();
DecimalFormat x = new DecimalFormat("0.0000");
System.out.println("El volumen del cilindro es... "+x.format(v));
System.exit(0);

}
}

------------------------------------------------------------------------------------

 Programación Orientada a Objetos en C++

#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#define cls clrscr()

class Empleado{
   private:
       char nombre[50];      // Atributos o Datos miembro de la clase
       long codigo;
       float salario;

   public:
       Empleado( ){codigo=salario=0;      // Metodo o Función constructor
                              strcpy(nombre," ");}
       void leer_empleado(){      // Metodos o Funciones miembro de la clase
               cout << "DATOS DEL EMPLEADO..."<< endl;
               cout << endl << "Codigo? "; cin >> codigo;
               cout << "Nombre? "; gets(nombre);
               cout << "Sueldo? $"; cin >> salario;
       }
       void mostrar_empleado(){
               cout << "Codigo : " << codigo << endl;
               cout << "Nombre : " << nombre << endl;
               cout << "Salario : $" << salario << endl;
       }
};

void main(){
     Empleado Trabajador;      // Crea el objeto Trabajador
     cls;
     Trabajador.leer_empleado();      // Lee por teclado el objeto Trabajador
     cls;
     cout <<endl<< "OBJETO Trabajador"<<endl;
     Trabajador.mostrar_empleado();      // Visualiza el objeto Trabajador
     getch();
}

  <>.  Escriba un Programa Orientado a Objetos en C++ para crear la  clase Factura. Definir las funciones o métodos que permitan leer, visualizar y calcular el IVA de una instancia de Factura.

________________________________________

 Programación Estructurada en C++

 

 Secuenciales

 La programación estructurada es un enfoque disciplinado para escribir programas más legibles y eficientes que los programas no estructurados, así como más fáciles de probar, depurar y modificar. Existen conceptos básicos que se deben conocer de todo lenguaje de programación: Tipos de datos y operadores, declaración de constantes, ámbito de las variables, instrucciones de entrada/salida, funciones de biblioteca...

 Como lo sugiere su nombre, en una estructura secuencial las instrucciones del programa se ejecutan en el mismo orden en que están escritas. Una secuencia de instrucciones son pasos sucesivos, uno seguido de otro.

    Escribir un programa para solucionar los siguientes problemas simples de computación:

  • Solucionar el problema que tienen en una bomba de gasolina 'TERPEL'. Los surtidores de la gasolinera registran el combustible en galones, pero el precio de la gasolina está fijado en litros. Calcular e imprimir el valor que se le debe cobrar al cliente. (1 galón tiene 3.785 litros).

// Esta es la forma de insertar comentarios en lenguaje C++.
// Programa: Terpel.cpp
// Autor : Usted
// Fecha : Abril  22  de 2003
// Este programita permite convertir galones a litros

#include "iostream.h"
#include "conio.h"
#define LP clrscr( )
// Estas son declarativas del preprocesador. Son archivos
// de cabecera o librerias de funciones (de biblioteca) y
// macroinstrucciones. El compilador reemplazara la constante
// simbolica LP por la funcion clrscr(), limpiar pantalla.

void main( )   // funcion principal del lenguaje C
{  // Inicio
int galones;  // declaracion de la variable entera galones
float valorcli, preciol;  // declaracion de variables tipo real
LP;            //  limpiar pantalla;
cout << "<> BOMBA TERPEL <>" << endl << endl;                  // salida por pantalla y doble salto de linea

cout << "Por favor, digite la cantidad de galones de gasolina -> ";
cin >> galones;        // entrada por teclado;
cout << "Precio de un litro ? -> ";
cin >> preciol;        // entrada por teclado;
valorcli = galones * 3.785 * preciol;    // instruccion de asignacion
cout << "Valor a cobrar al cliente = $" << valorcli << endl;
cout << "Presione ENTER para terminar...";
getch();   // detiene la ejecucion del programa
}            //  Fin de la funcion main( ) y del programa

 A continuación, el mismo programa, pero en  Pascal:

program TERPEL;
{ Esta es la forma de insertar comentarios en lenguaje Pascal.
  Autor : Usted
  Fecha : Abril 22 de 2003
  Este programita permite convertir galones a litros
}
uses crt;
var   { Declaracion de variables }
   valorcli, preciol  :  real;
   galones              :  integer;


BEGIN    { Bloque principal del programa }
   clrscr;
   WriteLn('<> BOMBA TERPEL <>');
   Write('Por favor, digite la cantidad de galones de gasolina -> '); 
   ReadLn(galones);        { entrada por teclado }
   Write('Precio de un litro ? -> '); 
   ReadLn(preciol);        { entrada por teclado } 

   valorcli := galones * 3.785 * preciol;    { instruccion de asignacion } 

   WriteLn(' Valor a cobrar al cliente = $',valorcli);

   Write('Presione cualquier tecla para terminar...');
   ReadLn;   { detiene la ejecucion del programa }
END.       { Fin del programa}

___________________________________________________________________________________________  

Ejercicios "amistosos"

___________________________________________________________________________________________

  1. Calcular el IVA y el valor a pagar por el cliente en la venta de x cantidad de un producto cualquiera. Calcular e imprimir también el cambio que se le debe entregar al cliente.

  2. Si un poste de alumbrado público, de 14 m de altura,  proyecta una sombra de 7 m, ¿cuál será la sombra proyectada por una persona?

  3. Leer la velocidad media en Km por hora de un vehículo que viaja de Ibagué a Cali. ¿Cuántos metros puede recorrer en 5 horas?

  4. Escriba un programa para liquidar el servicio de teléfono según las pulsaciones registradas por uso del servicio en la empresa "PengüiTel". El programa debe mostrar el número del teléfono, la cantidad de pulsaciones, tarifa por pulsación y el valor a pagar por el servicio.

  5. La distancia de la Tierra a la Luna es de aproximadamente 380 Megámetros. Calcular y visualizar esta distancia en Kilómetros y luego en metros.

  6. El monte Elbruz en la cordillera del Cáucaso, entre los mares Negro y Caspio, tiene 5 Km, 6 Hm y 4 Dm de altura. Y el Kilimanjaro, en Tanzania, es el monte más alto de Africa con 5 Km, 8 Hm y 9 Dm de altura. ¿Cuántos metros es un monte más alto que el otro?

  7. Un frasco de champú 'María Salomé' con una capacidad de 750 cm³  cuesta N pe$os. ¿Cuánto costará un frasco del mismo champú pero con una capacidad de un litro?

  8. La gran pirámide de Egipto está compuesta por 2 300 000 bloques de piedra, cada uno con una masa promedio de 2.5 megagramos o toneladas (1 Megagramo equivale a 10^6 gramos). ¿Cuál es la masa total de la pirámide? 

  9. ¿Cuántas horas hay en 72000 segundos?

  10. En N días 5 programadores desarrollan una aplicación. ¿En cuántos días podrían desarrollar el mismo software 8 programadores?

  11. Un buque de la Armada, de N marineros, tiene víveres para 2 meses. Si queremos que los víveres duren 10 días más, ¿cuántos marineros habría que dejar en la base naval?

  12. Doce empleados de un juzgado digitan 240 páginas trabajando N horas diarias. ¿Cuántas páginas pueden digitar diariamente dieciséis empleados si trabajan el doble del tiempo en condiciones semejantes?

  13. Un estudiante dejó sin responder 3 preguntas de un examen. Si obtuvo una calificación de 85 sobre 100, ¿cuál fue el número de preguntas del examen?

  14. Un comerciante compra CD's  a  N pe$os. ¿A qué precio debe venderlos para ganar el 20% del costo?

  15. Andrés le presta a Nancy la suma de N pe$os al 8% anual. Calcular el interés  y el capital final que debe pagar ella al cabo de 2 años.

  16. ¿Qué capital tendrá que ahorrar una persona en el banco, al 30% anual, para que produzca $24000 en 2 años?

  17. Calcular e imprimir la distancia entre dos puntos P1 y P2.

  18. Calcular e imprimir el número de segundos que hay en un determinado número de dias.

  19. Leer por teclado el radio y la altura de un cilindro y calcular e imprimir el área y su volumen.

  20. Leer el radio de una esfera y calcular e imprimir el área y su volumen.

  21. El 'viejo Patiño' compró un terreno en Argentina. La extensión del terreno está especificada en Acres. Leer la extensión del campo en Acres y calcular e imprimir su extensión en Hectáreas. (1 Acre = 4047 metros cuadrados. 1 Hectárea = 10000 metros cuadrados).

  22. Leer la cédula, nombre, sexo, horas trabajadas y valor de la hora de un trabajador y deducir e imprimir su salario neto aplicando una bonificación del 4% y un aporte del 7% a la EPS.

  23. Convertir una cantidad de pulgadas a centímetros. Imprimir los dos valores.

  24. Leer por teclado tres números enteros y calcular e imprimir: a) Su producto, b) Resta, c) División cociente del primero por el segundo, d) División residuo del primero por el tercero, e) la sumatoria de los tres números elevada al cubo, f) raíz cuadrada del segundo y g) la media aritmética de los tres números.

  25. Leer la longitud de los catetos de un triángulo rectángulo y determinar e imprimir su hipotenusa.

  26. Don David es el dueño de una Casa de Cambio y necesita un programa que permita leer por teclado una cantidad expresada en dólares y convertir e imprimir esa cantidad en pesos colombianos.

  27. En una copa hay 8 onzas. Convertir una cantidad de onzas en copas e imprimir los dos valores.

  28. El número de sonidos emitidos por un grillo en un minuto, es una función de la temperatura. Como resultado de esto, es posible determinar el nivel de la temperatura haciendo uso de un grillito como termómetro. La fórmula para la función es: T = N/4 + 40, donde T representa la temperatura en grados Fahrenheit y N, el número de sonidos emitidos por minuto. Calcular e imprimir la temperatura en grados Celsius, teniendo en cuenta el número de sonidos emitidos por el grillo.

  29. Leer una cantidad entera de segundos y determinar e imprimir su equivalente en minutos y segundos. Por ej: 90 segundos equivalen a 1 minuto y 30 segundos.

  30. Leer por teclado las tres notas de un alumno de programación y calcular e imprimir su definitiva correspondiente al primer 60%. Los porcentajes de las notas son 15, 20 y 25, respectivamente.

  31. En las olimpiadas de invierno el tiempo que realizan los participantes en la competencia de velocidad en pista, se mide en minutos, segundos y centésimas. La distancia que recorren, por otra parte, se expresa en metros. Codifique un programa que calcule e imprima la velocidad de los participantes, en kilómetros por hora, de las diferentes competencias.

  32. Dado el radio, la generatriz y la altura de un cono, calcule e imprima el área de la base, el área lateral, el área total y su volumen.

  33. Leer por teclado los datos A, B, C y D que representan números enteros y calcular e imprimir el resultado de las siguientes expresiones: (A-C)^ 4 / D² y (B-D)^ 5 / A³.

  34. Escriba un programa que acepte por teclado un número de cinco dígitos, los separe y los imprima dejando tres espacios entre ellos (utilice los operadores división y módulo). Por ej., si el usuario teclea 27518, el programa debe imprimir  2   7   5   1   8 

  35. El negocio de comidas rápidas "Don Pincho" tiene el siguiente menú:

Hamburguesa $2500
Pincho de pollo $2000
Choriperro $1500
Arepa mixta $1100
Arepa de huevo $800
Consomé (de 'Águila') $1000
Jugos $700

Escriba un programa que calcule e imprima el valor total de las ventas al final del día. Imprimir también el impuesto a pagar (% del IVA).



Inicio | Biografía | Cursos | Para pensar... | Para reflexionar... | Para reir | Enlaces

 
Profesor Gustavo Martínez Villalobos
Email: gustavo.martinez@unibague.edu.co
Facultad de Ingeniería de Sistemas, Coruniversitaria
Ibagué, Tolima, COLOMBIA