Balança

Balança

Exercício de aprendizagem

Introdução

Propriedades

Uma propriedade em C# é um membro de uma classe que dá acesso aos dados dentro dessa classe. Quem chama pode definir ou obter (get) os dados. As propriedades podem ser implementadas automaticamente ou ter um campo de suporte. Incluem um acessador set e/ou um acessador get. Nalgumas outras linguagens, um "mutator" é mais ou menos equivalente a um acessador set e um "accessor" é mais ou menos equivalente a um acessador get, embora a composição da sintaxe seja completamente diferente.

Ao definir uma propriedade, o valor de entrada pode ser validado, formatado ou manipulado de outra forma e, de facto, qualquer operação programática acessível ao código da classe pode ser executada.

Da mesma forma, ao obter uma propriedade, os dados podem ser calculados ou formatados e, mais uma vez, qualquer operação programática disponível para a classe pode ser executada.

As propriedades têm modificadores de acesso (public, private etc.) da mesma forma que outros membros da classe, mas o acessador set pode ter um nível de acesso independente do acessador de obtenção (get) e vice-versa. Uma propriedade não tem de ter ambos os acessadores, pode ter apenas um (get ou set).

A sintaxe básica para expressar propriedades pode assumir duas formas:

Propriedades suportadas por campo/expressão:

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

Propriedades autoimplementadas

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

A inicialização é opcional.

Instruções

Neste exercício vais modelar uma balança com o quilograma como unidade.

Tens 6 tarefas, cada uma das quais exige que implementes uma ou mais propriedades:

1. Permite que a balança tenha uma precisão

Para responder a exigências diferentes, permitimos que cada balança seja personalizada com uma precisão (o número de algarismos depois do separador decimal). Implementa a classe WeighingMachine com uma propriedade Precision só de leitura, definida com o argumento precision do construtor:

var wm = new WeighingMachine(precision: 3);

//  => wm.Precision == 3

2. Permite definir o peso na balança

Implementa a propriedade WeighingMachine.Weight para permitir obter e definir o peso:

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

//  => wm.Weight == 60.5

3. Garante que um peso de entrada negativo é rejeitado

Como é óbvio, ninguém pode ter um peso negativo. Adiciona validação à propriedade WeighingMachine.Weight para lançar uma ArgumentOutOfRangeException ao tentar defini-la com um peso negativo:

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

4. Permite aplicar um ajuste de tara à balança

O ajuste de tara pode ser qualquer valor (mesmo negativo ou um valor que torne o peso apresentado negativo). Implementa a propriedade WeighingMachine.TareAdjustment para permitir definir o ajuste de tara:

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

// => wm.TareAdjustment == -10.6

5. Garante que a balança tem um ajuste de tara predefinido

Depois de alguns testes aprofundados, parece que, devido a um problema de fabrico, todas as balanças têm tendência para sobrestimar o peso em 5. Altera a propriedade WeighingMachine.TareAdjustment para 5 como valor predefinido.

var wm = new WeighingMachine(precision: 3);

// => wm.TareAdjustment == 5.0

6. Permite obter o peso

Implementa a propriedade WeighingMachine.DisplayWeight, que deve devolver uma string que mostre o peso depois do ajuste de tara, com a precisão correta aplicada e a unidade adicionada. Tem em atenção 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 via GitHub A ligação abre numa nova janela ou separador
C# Exercism

Estás pronto para começar Balança?

Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.