¿Público y/o Públicado?

Cuando ré/factorizamos surgen nuevos elementos de los cuales es importante determinar si son públicos y adicionalmente estan publicados, si no hacemos esta aclaración podemos fácilmente crear referencias innecesarias, veamos un ejemplo.

class Billetera
  def initialize
    @movimientos = []
  end
  
  def ingreso(concepto, valor)
    @movimientos << [concepto, valor]
  end

  def gasto(concepto, valor)
    @movimientos << [concepto, -valor]
  end

  def saldo
    @movimientos.inject(0) { |saldo, movimiento| saldo + movimiento[1] }
  end
end

La clase Billetera es pública y publicada (concepto común al asumir que cualquiera puede referenciar la clase y hacer uso de esta).

Ahora realicemos una refactorización buscando la apertura del concepto movimiento.

class Movimiento
  def self.debito(concepto, valor)
    new(concepto, valor)
  end
  
  def self.credito(concepto, valor)
    new(concepto, -valor)
  end

  def balancear(saldo)
    saldo + @valor
  end

  private
  
  def initialize(concepto, valor)
    @concepto = concepto
    @valor = valor
  end
end

class Cuenta
  def initialize
    @movimientos = []
  end

  def registrar(movimiento)
    @movimientos << movimiento
  end
  
  def saldo
    @movimientos.inject(0) { |saldo, movimiento| movimiento.balancear(saldo) }
  end
end

class Billetera
  def initialize(cuenta)
    @cuenta = cuenta
  end
  
  def ingreso(concepto, valor)
    @cuenta.registrar Movimiento.debito(concepto, valor)
  end
  
  def gasto(concepto, valor)
    @cuenta.registrar Movimiento.credito(concepto, valor)
  end

  def saldo
    @cuenta.saldo
  end
end

Las clases Billetera, Cuenta, Movimiento son por defecto públicas (este es el alcance general pero cada lenguaje tiene un comportamiento diferente por ejemplo en C# el alcance por defecto es private) ahora, ¿las nuevas clases (Cuenta, Movimiento) deben estar publicadas, es decir podemos referenciarlas desde otras secciones del programa? no, no están publicadas son elementos que surgieron de la refactorización y tienen alta cohesión con el origen de la creación (Billetera), posteriorme a la llegada de nuevos requerimientos se valoraría si deben ser publicadas.

Ahora ¿Cómo podemos hacer explicito este concepto? ni idea (si tengo ideas), es algo que queda a la creatividad del equipo ya que depende de.