Normalmente un problema resuelto con la metodología de programación orientada a objetos no interviene una sola clase, sino que hay muchas clases que interactúan y se comunican.
Plantearemos problemas separando las actividades en dos clases.
Un banco tiene 3 clientes que pueden hacer depósitos y extracciones. También el banco requiere que al final del día calcule la cantidad de dinero que hay depositado.
Lo primero que hacemos es identificar las clases:
Podemos identificar la clase Cliente y la clase Banco.
Luego debemos definir las propiedades y los métodos de cada clase:
Cliente
propiedades
nombre
monto
métodos
depositar
extraer
imprimir
Banco
propiedades
3 Cliente (3 objetos de la clase Cliente)
métodos
operar
depositosTotales
class Cliente(var nombre: String, var monto: Float) {
fun depositar(monto: Float) {
this.monto += monto
}
fun extraer(monto: Float) {
this.monto -= monto
}
fun imprimir() {
println("$nombre tiene depositado la suma de $monto")
}
}
class Banco {
val cliente1: Cliente = Cliente("Juan", 0f)
var cliente2: Cliente = Cliente("Ana", 0f)
var cliente3: Cliente = Cliente("Luis", 0f)
fun operar() {
cliente1.depositar(100f)
cliente2.depositar(150f)
cliente3.depositar(200f)
cliente3.extraer(150f)
}
fun depositosTotales() {
val total = cliente1.monto + cliente2.monto + cliente3.monto
println("El total de dinero del banco es: $total")
cliente1.imprimir()
cliente2.imprimir()
cliente3.imprimir()
}
}
fun main(parametro: Array<String>) {
val banco1 = Banco()
banco1.operar()
banco1.depositosTotales()
}
Primero hacemos la declaración de la clase Cliente, al constructor principal llegan el nombre del cliente y el monto inicial depositado (las propiedades las estamos definiendo en el propio constructor):
class Cliente(var nombre: String, var monto: Float) {
El método que aumenta la propiedad monto es:
fun depositar(monto: Float) {
this.monto += monto
}
Y el método que reduce la propiedad monto del cliente es:
fun extraer(monto: Float) {
this.monto -= monto
}
Para mostrar los datos del cliente tenemos el método:
fun imprimir() {
println("$nombre tiene depositado la suma de $monto")
}
La segunda clase de nuestro problema es el Banco. Esta clase define tres propiedades de la clase Cliente (la clase Cliente colabora con la clase Banco):
class Banco {
val cliente1: Cliente = Cliente("Juan", 0f)
var cliente2: Cliente = Cliente("Ana", 0f)
var cliente3: Cliente = Cliente("Luis", 0f)
El método operar realiza una serie de depósitos y extracciones de los clientes:
fun operar() {
cliente1.depositar(100f)
cliente2.depositar(150f)
cliente3.depositar(200f)
cliente3.extraer(150f)
}
El método que muestra cuanto dinero tiene depositado el banco se resuelve accediendo a la propiedad monto de cada cliente:
fun depositosTotales() {
val total = cliente1.monto + cliente2.monto + cliente3.monto
println("El total de dinero del banco es: $total")
cliente1.imprimir()
cliente2.imprimir()
cliente3.imprimir()
}
En la funciób main de nuestro programa procedemos a crear un objeto de la clase Banco y llamar a los dos métodos:
fun main(parametro: Array<String>) {
val banco1 = Banco()
banco1.operar()
banco1.depositosTotales()
}
Plantear un programa que permita jugar a los dados. Las reglas de juego son:
se tiran tres dados si los tres salen con el mismo valor mostrar un mensaje que "gano", sino "perdió".
Lo primero que hacemos es identificar las clases:
Podemos identificar la clase Dado y la clase JuegoDeDados.
Luego las propiedades y los métodos de cada clase:
Dado
propiedades
valor
métodos
tirar
imprimir
JuegoDeDados
atributos
3 Dado (3 objetos de la clase Dado)
métodos
jugar
class Dado (var valor: Int){
fun tirar() {
valor = ((Math.random() * 6) + 1).toInt()
imprimir()
}
fun imprimir() {
println("Valor del dado: $valor")
}
}
class JuegoDeDados {
val dado1 = Dado(1)
val dado2 = Dado(1)
val dado3 = Dado(1)
fun jugar() {
dado1.tirar()
dado2.tirar()
dado3.tirar()
if (dado1.valor == dado2.valor && dado2.valor == dado3.valor)
println("Ganó")
else
print("Perdió")
}
}
fun main(parametro: Array<String>) {
val juego1 = JuegoDeDados()
juego1.jugar()
}
La clase Dado define un método tirar que almacena en la propiedad valor un número aleatorio comprendido entre 1 y 6. Además llama al método imprimir para mostrarlo:
class Dado (var valor: Int){
fun tirar() {
valor = ((Math.random() * 6) + 1).toInt()
imprimir()
}
La clase JuegoDeDados define tres propiedades de la clase Dado:
class JuegoDeDados {
val dado1 = Dado(1)
val dado2 = Dado(1)
val dado3 = Dado(1)
En el método jugar de la clase JuegoDeDados procedemos a pedir a cada dado que se tire y verificamos si los tres valores son iguales:
fun jugar() {
dado1.tirar()
dado2.tirar()
dado3.tirar()
if (dado1.valor == dado2.valor && dado2.valor == dado3.valor)
println("Ganó")
else
print("Perdió")
}
En la función main de nuestro programa creamos un objeto de la clase JuegoDeDados:
fun main(parametro: Array<String>) {
val juego1 = JuegoDeDados()
juego1.jugar()
}
Proyecto121
class Socio (val nombre: String, val antiguedad: Int) {
fun imprimir() {
println("$nombre tiene una antiguedad de $antiguedad")
}
}
class Club {
val socio1 = Socio("Juan", 22)
val socio2 = Socio("Ana", 34)
val socio3 = Socio("Carlos", 1)
fun mayorAntiguedad() {
socio1.imprimir()
socio2.imprimir()
socio3.imprimir()
print("Socio con mayor antiguedad:")
when {
socio1.antiguedad > socio2.antiguedad && socio1.antiguedad > socio3.antiguedad -> print(socio1.nombre)
socio2.antiguedad > socio3.antiguedad -> print(socio2.nombre)
else -> print(socio3.nombre)
}
}
}
fun main(parametro: Array<String>) {
val club1 = Club()
club1.mayorAntiguedad()
}