Crear una instancia de una clase se hace llamando a su constructor mediante el operador new. Un constructor es un tipo especial de método cuyo objetivo es inicializar una instancia recién creada. Los constructores se parecen a los métodos normales, pero no tienen tipo de retorno y su nombre coincide con el de la clase.
class Library
{
private int books;
public Library()
{
// Initialize the books field
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
Al igual que los métodos normales, los constructores pueden tener parámetros. Por lo general, los parámetros del constructor se guardan como campos (privados) para acceder a ellos más adelante, o bien se usan en algún cálculo puntual. Se pueden pasar argumentos a los constructores igual que se pasan argumentos a los métodos normales.
class Building
{
private int numberOfStories;
private int totalHeight;
public Building(int numberOfStories, double storyHeight)
{
this.numberOfStories = numberOfStories;
this.totalHeight = numberOfStories * storyHeight;
}
}
// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2)
En este ejercicio vas a organizar carreras entre varios tipos de autos a control remoto. Cada auto tiene sus propias características de velocidad y consumo de batería.
Los autos empiezan con la batería llena (100%). Cada vez que conduces el auto con el control remoto, recorre en metros la velocidad del auto y disminuye el porcentaje de batería restante según su consumo de batería.
Si la batería de un auto está por debajo de su porcentaje de consumo de batería, ya no puedes conducir el auto.
Cada pista de carreras tiene su propia distancia. Los autos se ponen a prueba verificando si pueden terminar la pista sin quedarse sin batería.
Tienes seis tareas, y cada una trabajará con instancias de autos a control remoto.
Para crear un auto a control remoto, define un constructor para la clase RemoteControlCar que reciba como sus dos parámetros la velocidad del auto en metros y el porcentaje de consumo de batería (ambos de tipo int):
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
Para crear una pista de carreras, define un constructor para la clase RaceTrack que reciba como único parámetro la distancia de la pista en metros (de tipo int):
int distance = 800;
var raceTrack = new RaceTrack(distance);
Implementa el método RemoteControlCar.Drive() que actualiza la cantidad de metros recorridos según la velocidad del auto. Implementa también el método RemoteControlCar.DistanceDriven() para devolver la cantidad de metros que ha recorrido el auto:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.DistanceDriven();
// => 5
Actualiza el método RemoteControlCar.Drive() para agotar la batería según el consumo de batería del auto. Implementa también el método RemoteControlCar.BatteryDrained() que indica si la batería está agotada:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.BatteryDrained();
// => false
El auto a control remoto más vendido es el Nitro, que tiene una impresionante velocidad máxima de 50 metros con un consumo de batería del 4%. Implementa el método (estático) RemoteControlCar.Nitro() para devolver este tipo de auto:
var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50
Para terminar una pista de carreras, un auto tiene que poder recorrer la distancia de la pista. Esto significa no agotar su batería antes de cruzar la línea de meta. Implementa el método RaceTrack.TryFinishTrack() que recibe una instancia de RemoteControlCar como su parámetro y devuelve true si el auto puede terminar la pista de carreras; de lo contrario, devuelve false:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
int distance = 100;
var raceTrack = new RaceTrack(distance);
raceTrack.TryFinishTrack(car);
// => true
Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.