Uno de los principios fundamentales de la programación orientada a objetos es el encapsulamiento, esto se logra agrupando una serie de métodos y propiedades dentro de una clase.
En Kotlin cuando implementamos una clase por defecto todas las propiedades y métodos son de tipo public. Un método o propiedad public se puede acceder desde donde definimos un objeto de dicha clase.
En el caso que necesitemos definir métodos y propiedades que solo se puedan acceder desde dentro de la clase las debemos definir con el modificador private.
Plantear una clase Operaciones que en un método solicite la carga de 2 enteros y posteriormente llame desde el mismo método a otros dos métodos privados que calculen su suma y producto.
class Operaciones {
private var valor1: Int = 0
private var valor2: Int = 0
fun cargar() {
print("Ingrese primer valor:")
valor1 = readln().toInt()
print("Ingrese segundo valor:")
valor2 = readln().toInt()
sumar()
restar()
}
private fun sumar() {
val suma = valor1 + valor2
println("La suma de $valor1 y $valor2 es $suma")
}
private fun restar() {
val resta = valor1 - valor2
println("La resta de $valor1 y $valor2 es $resta")
}
}
fun main(parametro: Array<String>) {
val operaciones1 = Operaciones()
operaciones1.cargar()
}
Un método se lo define como privado antecediendo la palabra clave private:
private fun sumar() {
val suma = valor1 + valor2
println("La suma de $valor1 y $valor2 es $suma")
}
Luego si queremos acceder a dicho método desde donde definimos un objetos se genera un error sintáctico:

Lo mismo si queremos ocultar el acceso de una propiedad desde fuera de la clase debemos anteceder la palabra clave private:
private var valor1: Int = 0
private var valor2: Int = 0
La palabra clave public no es necesaria agregarla a un método o propiedad ya que es el valor por defecto que toma el compilador de Kotlin cuando las definimos. No genera error pero es redundante entonces escribir dicho modificador:

Plantear una clase llamada Dado. Definir una propiedad privada llamada valor y tres métodos uno privado que dibuje una línea de asteríscos y otro dos públicos, uno que genere un número aleatorio entre 1 y 6 y otro que lo imprima llamando en este último al que dibuja la línea de asteríscos.
class Dado{
private var valor: Int = 1
fun tirar() {
valor = ((Math.random() * 6) + 1).toInt()
}
fun imprimir() {
separador()
println("Valor del dado: $valor")
separador()
}
private fun separador() = println("**************************************")
}
fun main(parametro: Array<String>) {
val dado1 = Dado()
dado1.tirar()
dado1.imprimir()
}
Definimos la propiedad valor de tipo private:
private var valor: Int = 1
El método separador también lo definimos private:
private fun separador() = println("**************************************")
Desde la función main donde definimos un objeto de la clase Dado solo podemos acceder a los métodos tirar e imprimir:
fun main(parametro: Array<String>) {
val dado1 = Dado()
dado1.tirar()
dado1.imprimir()
}
Proyecto124
class Vector {
private val vec = IntArray(5)
init {
cargar()
}
private fun cargar() {
for(i in vec.indices)
vec[i] = ((Math.random() * 11)).toInt()
}
fun imprimir() {
println("Listado completo del arreglo")
for(i in vec.indices)
print("${vec[i]} - ")
println()
}
fun mostrarMayor() {
var mayor = vec[0]
for(i in vec.indices)
if (vec[i] > mayor)
mayor = vec[i]
println("El elemento mayor del arreglo es $mayor")
}
fun mostrarMenor() {
var menor = vec[0]
for(i in vec.indices)
if (vec[i] < menor)
menor = vec[i]
println("El elemento menor del arreglo es $menor")
}
}
fun main(parametro: Array<String>) {
val vector1 = Vector()
vector1.imprimir()
vector1.mostrarMayor()
vector1.mostrarMenor()
}