1
PROGRAMA DE CAJERO AUTOMATICO
USANDO LA PROGRAMACION
ORIENTADA A OBJETOS
2
ÍNDICE
1. INTRODUCCIÓN……………………………………………………………..5
2. OBJETIVOS …………………………………………………………………..6
2.1.Hipotesis…………………………………………………………………...6
2.2.Alcance…………………………………………………………………….6
3. SOLUCIÓN PROPUESTA …………………………………………………...7
4. METODOLOGÍA DE
INVESTIGACIÓN…………………………………………………………….8
4.1.Base Teórica……………….………………………………………………8
4.2. Implementación del Código……………………………………………..14
5. ANÁLISIS DE RESULTADOS……………………………………………..29
6. CONCLUSION……………………………………………………………....32
7. BIBLIOGRAFIA…………………………………………………………….33
3
1.INTRODUCCION
Se realizar un programa de Cajero Automático , en lenguaje Java Script , usando la
programación orientado a Objetos (POO)que nos otorga características que optimizan los
recursos ya que nos permite utilizar el polimorfismo, herencias, etc
Se explicara con la base teórica la programación Orientada a Objetos ,sus características y el
Lenguaje de Programación Java.
Se explicara en base a comentarios el código realizado usando la POO y el funcionamiento
del programa.
Se demostrara la eficiencia que tiene usar las herramientas propuestas para la realización del
programa.
4
2.OBJETIVOS
El objetivo es usar la programación Orientada a objetos para un programa de Cajeros
Automático ya que nos permite simular en el diseño y código la realidad de las acciones y
objetos .
2.1Hipotesis
Que tan eficiente en seguridad ,rapidez ,estabilidad y funcional es usar la programación
Orientada a Objetos para las operaciones que se realizan en un Cajero Automático
2.2Alcance
Los alcances que se deben tener en cuenta para la realización del programa son:
Mediante que entorno una persona realiza operaciones de su cuenta bancaria.
Que datos de validación ingresa un persona para seleccionar las transacciones con su cuenta.
Definir cuales son las transacciones que realiza una persona al usar el cajero .
Teniendo conocimiento de estos puntos se puede desarrollar el programa.
5
3.SOLUCIÓN PROPUESTA
Hacer un programa que automatice las transacciones bancarias de Deposito y Retiro de dinero
de una cuenta. Por lo eficiente que han demostrado ser ,se usaran las siguientes herramientas:
El lenguaje de programación en Java porque es un lenguaje multiplataforma .
La programación Orientada a Objetos porque permite simular la realidad .
6
4.METODOLOGÍA DE INVESTIGACIÓN
Para poder desarrollar el programa explicaremos la Base Teórica de los elementos que la
conformaran.
4.1Base Teórica
Lenguaje de Programación Java :
Java es un lenguaje de programación y una plataforma informática que fue comercializada por
primera vez en 1995 por Sun Microsystems. Java es rápido, seguro y fiable. Desde portátiles
hasta centros de datos, desde consolas para juegos hasta computadoras avanzadas, desde
teléfonos móviles hasta Internet, Java está en todas partes, si es ejecutado en una plataforma
no tiene que ser recompilado para correr en otra.
El lenguaje de programación Java fue desarrollado originalmente por James Gosling, de Sun
Microsystems y publicado en 1995 como un componente fundamental de la plataforma Java
de Sun Microsystems. Su sintaxis deriva en gran medida de C y C++, pero tiene menos
utilidades de bajo nivel que cualquiera de ellos. Las aplicaciones de Java son compiladas a
bytecode (clase Java), que puede ejecutarse en cualquier máquina virtual Java (JVM) sin
importar la arquitectura de la computadora subyacente.
La decisión de usar el Lenguaje Java para desarrollar el programa es por sus siguientes
características :
1. Debería usar el paradigma de la programación orientada a objetos.
2. Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos.
3. Debería incluir por defecto soporte para trabajo en red.
4. Debería diseñarse para ejecutar código en sistemas remotos de forma segura.
7
5. Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos,
como C++.
6. El optimo uso de la memoria que emplea Java
La programación orientada a objetos (POO)
Es un paradigma de programación que usa objetos para crear aplicaciones. Está basada en tres
pilares fundamentales: herencia, polimorfismo, encapsulación. Su uso se popularizó a
principios de la década de 1990. En la actualidad, existe una gran variedad de lenguajes de
programación que soportan la orientación a objetos, entre ellos Java.
Ventajas de la programación orientada a objetos:
Fomenta la reutilización y ampliación del código.
Permite crear sistemas más complejos.
La programación se asemeja al mundo real.
Agiliza el desarrollo de software.
Facilita el trabajo en equipo.
Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se
modela y representa el mundo real tan fielmente como sea posible.
Para entender este modelo vamos a revisar 2 conceptos fundamentales: clases y objetos
Las clases
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro
teléfono móvil 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 móvil es una instancia de
una clase conocida como “móvil”. Los móviles tienen características (marca, modelo, sistema
8
operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar
mensajes multimedia, transmisión de datos, etc.).
Cuando se fabrican los móviles, los fabricantes aprovechan el hecho de que los móviles
comparten esas características comunes y construyen modelos o plantillas comunes, para que
a partir de esas se puedan crear muchos móviles del mismo modelo. A ese modelo o plantilla
le llamamos clase, y a los equipos que sacamos a partir de ella la llamamos objetos.
Esto mismo se aplica a los objetos de software, se puede 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.
Objetos
Un objeto es una instancia de una clase, una instancia es un ejemplar, un caso específico de
una clase, por ejemplo yo puedo crear varios objetos de tipo clase y cada uno es diferente, por
ejemplo el primero objeto es de color negro, el segundo objeto es de color blanco.
Como cada objeto es diferente se le conoce como instancia, entonces cuando escuches el
término “hay que instanciar “, se refiere a crear un nuevo objeto y que cada objeto es
diferente.
Los objetos tienen estado que son los atributos y comportamiento que son los métodos
9
Atributos serán cada una de las piezas o características de un objeto por ejemplo un
coche: nombre, color, modelo, plazas, caballaje, velocidad, etc.
Métodos estos serán las acciones que es capaz de hacer el Objeto ,por ejemplo el
coche: arrancar, acelerar, frenar, encenderLuces, cambiarColor, etc.
Encapsulamiento
Significa que sólo se debe mostrar los detalles esenciales de un objeto, mientras que los
detalles no esenciales se los debe ocultar.
Podemos hacer una analogía pensando en un sistema operativo Linux, en Linux si eres un
usuario root tienes todos los permisos del sistema y puedes acceder a todas la configuraciones.
Mientras que, si eres sólo un usuario, solo tendrás acceso parcial al sistema (ocultación de
información).
El encapsulamiento lo tenemos en una clase, en la que se puede ocultar o restringir los datos
(variables) o el código (métodos) utilizando palabras reservadas del lenguaje(como
private).evita que cuando instanciemos un objeto podamos acceder a ellas (por seguridad).
¿Y entonces como accedemos a los valores de esas variables de clase?
Mediante los métodos getter y setter.
Herencia
El concepto fundamental de la herencia es el proceso en el que un objeto adquiere
características de otro objeto.
Siguiendo con el ejemplo anterior del celular, un celular es un equipo con características
básicas.
10
Ahora pensemos en un Smartphone, que es un teléfono con características muy avanzadas en
cuanto al celular, pero que en sí guardan cierta relación.
Yo podría crear un Smartphone desde cero, pero si te das cuenta, hay cosas que en el celular y
el Smartphone son comunes y que las podría reutilizar y no volver a crear de nuevo.
Si me voy por la opción de crear un nuevo, estoy duplicando componentes y tiempo que me
lleva crearlo.
El problema anterior se soluciona utilizando la herencia, con lo que ya no crearía uno nuevo si
no que heredaría del objeto celular (reutilización) y lo que haría simplemente es añadir solo
las nuevas características y tendría el nuevo modelo que es el Smartphone.
La herencia también ayuda a la reutilización, puesto que si ya tengo algo creado lo puedo
reutilizar y no perder tiempo creando algo de nuevo.
En Java se maneja herencia simple, es decir que solo se puede heredar de una sola clase a la
vez.
Para decir que una clase hereda de otra, se utiliza la palabra reservada extends seguido de la
clase que se quiere heredar.
Polimorfismo
El polimorfismo es una palabra de origen griego que significa “muchas formas”.
El concepto dice que es la capacidad de un objeto para comportarse de diferentes formas de
acuerdo al mensaje enviado.
Este término está relacionado con la herencia. Podemos hacer una analogía con el celular, un
celular tiene la opción de llamada, tu puedes hacer una llamada y comunicarte con Pablo por
11
ejemplo, haces otra llamada y te comunicas con Ana, si te das cuenta la función es la misma
“hacer llamada” pero te comunicas con diferente persona.
La función hacer llamada se comporta de forma diferente para cada número marcado, que este
caso sería el mensaje que le envías a la función hacer llamada.
En Java un método con el mismo nombre puede comportarse de forma diferente de acuerdo al
objeto recibido. El compilador en tiempo de ejecución detecta que forma tomar de acuerdo al
objeto que recibe.
12
4.2. Implementación del Código
Un aspecto importante es tener claro la visibilidad que tendrán de los atributos y método , por
seguridad y uso de recursos ,que sería el encapsulamiento .
Hemos observado que, por lo general los atributos deben ser private, y que los métodos
invocados por los clientes de una clase dada deben ser public. Los métodos que se llaman sólo
por otros métodos de la clase como “métodos utilitarios” deben ser private
Además las clases fueron instanciadas múltiples veces, porque hay varias relaciones entre
ellas, empleando el polimorfismo.
También se usara la Herencia ,por que nos topamos con el problema de representar una
transacción financiera en el programa. En vez de crear una clase para representar a todos los
tipos de transacciones, optamos por crear 2 clases distintas de transacciones (Retiro y
Deposito) para representar las transacciones que puede realizar el Cajero Automático.
Estas clases tienen un atributo (numeroCuenta) y una operación(ejecutar) en común. Cada
clase requiere que el atributo numeroCuenta especifique la cuenta a la que se aplica la
transacción. Cada clase contiene la operación ejecutar, que el Cajero invoca para realizar la
transacción. Es evidente que Retiro y Deposito representan tipos de transacciones. Por lo que
el uso de la herencia para factorizar las características comunes parece apropiado para diseñar
estas clases.
Colocamos la funcionalidad común en una superclase, Transacción, que las clases Retiro y
Deposito extienden.
Este enfoque también facilita la extensibilidad del sistema. Si deseamos crear un nuevo
tipo de transacción (por ejemplo, Verificar saldo), sólo tenemos que crear una subclase de
Transaccion adicional que sobrescriba el método ejecutar con una versión apropiada para
ejecutar el nuevo tipo de transacción. Sólo tendríamos que realizar pequeñas modificaciones
13
al código del sistema, para permitir que los usuarios seleccionen el nuevo tipo de transacción
del menú principal
La clase Transaccion será abstracta , en este tipo de clases sólo se declara los atributos
y comportamientos comunes de sus subclases en una jerarquía de herencia.
La clase Transaccion define el concepto de lo que significa ser una transacción que tiene un
número de cuenta y puede ejecutarse.
Tal vez usted se pregunte por qué incluir el método abstract ejecutar en la clase Transaccion,
si carece de una implementación concreta. En concepto, incluimos este método porque
corresponde al comportamiento que define a todas las transacciones: ejecutarse.
Técnicamente, debemos incluir el método ejecutar en la superclase Transaccion, de manera
que las otras clases puedan invocarla mediante el polimorfismo a la versión sobrescrita
de este método en cada subclase, a través de una referencia Transaccion.
14
A continuación, detallaremos el código realizado:
Agregamos comentarios a los códigos, explicando que características del Lenguaje Orientado
a Objetos se utilizaron.
Se realizaron 9 Clases :
Teclado
Pantalla
Cliente
Cuenta
Transacción
Retiro
Deposito
Cajero
Proyecto_Final
15
CLASE TECLADO
16
CLASE PANTALLA
17
CLASE CLIENTE
18
CONTINUACION CLASE CLIENTE
19
20
CLASE CUENTA
21
22
CLASE TRANSACCION
23
CLASE RETIRO
24
CLASE DEPOSITO
25
CLASE CAJERO
26
CONTINUACION CLASE CAJERO
27
CONTINUACION DE CLASE CAJERO
28
29
CLASE PROYECTO_FINAL(MAIN)
5.ANÁLISIS DE RESULTADOS
30
Fueron creados objetos con los datos necesarios para hacer las pruebas(como fue mostrado en
el anterior capitulo)
Ahora verificaremos el resultado al ejecutar el programa:
1.Se solicita los datos: Numero de Cuenta y Clave
2.Se Valida si los datos ingresados son incorrectos, se informa y solicita nuevamente el
ingreso.
31
3.Cuando se ingresan los datos correctos, el programa mostrara las opciones de las
transacciones:
4.Se escoge la opción Retiro y se valida el monto a retirar según el saldo disponible.
Si el saldo es insuficiente muestra mensaje y solicita nuevo monto
5.Se ingresa un monto nuevo y el programa entrega el dinero y muestra mensaje
32
6.Se escoge la opción Deposito, la cantidad a depositar no es validado
Muestra mensaje del deposito
7.Se escoge la opción Salir
33
6.CONCLUSIONES
La eficiente respuesta y solidas características del lenguaje de programación Java demuestran
su idoneidad para realizar transacciones que deben ser rápidas y seguras.
La programación orientada a objetos representa y simula las acciones y objetos reales para
realizar operaciones en un Cajero Automático.
Las características de la Orientación a Objetos brindan un entorno donde los recursos son
usados de manera eficiente, evitándose duplicidad , uso de la memoria no optimo,etc. Lo que
demuestra su funcionalidad para realizar programas informáticos.
34
7.BIBLIOGRAFÍA
Java (lenguaje de programación)
https://es.wikipedia.org/wiki/Java_(lenguaje_de_programaci%C3%B3n)
Programación Orientada a Objetos en Java
https://asociacionaepi.es/programacion-orientada-a-objetos-en-
java/#:~:text=Empresas-,Programaci%C3%B3n%20Orientada%20a%20Objetos
%20en%20Java,de%20la%20d%C3%A9cada%20de%201990.
4 Elementos Claves para entender POO en Java
https://www.ecodeup.com/4-elementos-claves-para-entender-la-programacion-
orientada-objetos-en-java/
Caso de estudio del ATM,Parte 2: Implementación de un diseño orientado a objetos
https://es.scribd.com/document/271202349/Caso-de-Estudio-Parte-2