Rutas
/
C#
C#
/
Ejercicios
/
Báscula
Báscula

Báscula

Ejercicio de aprendizaje

Introducción

Propiedades

Una propiedad en C# es un miembro de una clase que da acceso a los datos que hay dentro de esa clase. Quien llama puede establecer esos datos o recuperarlos (get). Las propiedades pueden estar implementadas automáticamente o tener un campo de respaldo. Constan de un descriptor de acceso set y/o un descriptor de acceso get. En algunos otros lenguajes, un «mutador» viene a equivaler a un descriptor de acceso set y un «descriptor de acceso» viene a equivaler a un descriptor de acceso get, aunque la composición de la sintaxis es completamente distinta.

Al establecer una propiedad, el valor de entrada se puede validar, formatear o manipular de cualquier otra forma; de hecho, se puede ejecutar cualquier operación programática a la que tenga acceso el código de la clase.

Del mismo modo, al recuperar una propiedad los datos se pueden calcular o formatear y, de nuevo, se puede ejecutar cualquier operación programática de la que disponga la clase.

Las propiedades tienen modificadores de acceso (public, private, etc.) igual que otros miembros de la clase, pero el descriptor de acceso set puede tener un nivel de acceso independiente del descriptor de acceso get, y viceversa. Una propiedad no tiene por qué tener los dos descriptores de acceso: puede tener solo uno (o get o set).

La sintaxis básica para expresar propiedades puede adoptar dos formas:

Propiedades respaldadas por campo/expresión:

private int myField;
public int MyProperty
{
    get { return myField; }
    set { myField = value; }
}

Propiedades implementadas automáticamente

public int MyProperty { get; private set; } = 42;

La inicialización es opcional.

Instrucciones

En este ejercicio vas a modelar una báscula que usa kilogramos como unidad.

Tienes 6 tareas y cada una requiere que implementes una o más propiedades:

1. Permitir que la báscula tenga una precisión

Para adaptarnos a distintas necesidades, permitimos personalizar cada báscula con una precisión (el número de dígitos después del separador decimal). Implementa la clase WeighingMachine para que tenga una propiedad Precision de solo lectura establecida con el argumento precision del constructor:

var wm = new WeighingMachine(precision: 3);

//  => wm.Precision == 3

2. Permitir que se establezca el peso en la báscula

Implementa la propiedad WeighingMachine.Weight para permitir obtener y establecer el peso:

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;

//  => wm.Weight == 60.5

3. Asegurarte de que se rechaza un peso de entrada negativo

Está claro que nadie puede tener un peso negativo. Añade validación a la propiedad WeighingMachine.Weight para que lance una ArgumentOutOfRangeException cuando se intente establecer con un peso negativo:

var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException

4. Permitir que se aplique un ajuste de tara a la báscula

El ajuste de tara puede ser cualquier valor (incluso negativo, o un valor que haga que el peso mostrado sea negativo) Implementa la propiedad WeighingMachine.TareAdjustment para permitir establecer el ajuste de tara:

var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;

// => wm.TareAdjustment == -10.6

5. Asegurarte de que la báscula tiene un ajuste de tara predeterminado

Tras unas pruebas exhaustivas, parece que, debido a un problema de fabricación, todas las básculas tienen una tendencia a sobreestimar el peso en 5. Cambia la propiedad WeighingMachine.TareAdjustment para que su valor predeterminado sea 5.

var wm = new WeighingMachine(precision: 3);

// => wm.TareAdjustment == 5.0

6. Permitir obtener el peso

Implementa la propiedad WeighingMachine.DisplayWeight, que debe devolver un string que muestre el peso después del ajuste de tara, con la precisión correcta aplicada y la unidad añadida. Ten en cuenta que: display-weight = input-weight - tare-adjustment

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;

// => wm.DisplayWeight == "50.567 kg"
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
C# Exercism

¿Listo para empezar Báscula?

Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.