Tracks
/
C#
C#
/
Ejercicios
/
Competencia de control remoto
Competencia de control remoto

Competencia de control remoto

Ejercicio de aprendizaje

Introducción

Interfaces

Una interfaz es un tipo que contiene miembros que definen un grupo de funcionalidad relacionada. Separa los usos de una clase de su implementación, lo que permite múltiples implementaciones diferentes o el soporte de algún comportamiento genérico, como el formato, la comparación o la conversión.

La sintaxis de una interfaz es similar a la de una clase o una estructura, con la diferencia de que los métodos y las propiedades aparecen solo como la firma y no se proporciona un cuerpo.

public interface ILanguage
{
    string LanguageName { get; set; }
    string Speak();
}

public class ItalianTaveller : ILanguage, ICloneable
{
    public string LanguageName { get; set; } =  "Italiano";

    public string Speak()
    {
        return "Ciao mondo";
    }

    public object Clone()
    {
        ItalianTaveller it = new ItalianTaveller();
        it.LanguageName = this.LanguageName;
        return it;
    }
}

Todas las operaciones definidas por la interfaz deben implementarse.

Las interfaces pueden contener métodos y propiedades de instancia, entre otros miembros.

Ordenamiento

Para permitir que un objeto se compare con otro objeto, este debe implementar la interfaz IComparable<T>. Esta interfaz tiene un único método que es necesario implementar: int CompareTo(T other).

El método CompareTo puede devolver tres valores posibles:

  • Un valor menor que cero: el objeto actual es menor que el otro objeto.
  • Un valor mayor que cero: el objeto actual es mayor que el otro objeto.
  • Un valor igual a cero: el objeto actual es igual al otro objeto.

Instrucciones

En este ejercicio vas a trabajar un poco más con los autos de control remoto.

Se ha desarrollado un auto experimental y la pista de pruebas necesita adaptarse para aceptar tanto los modelos de producción como los experimentales. Los dos tipos de auto ya están construidos y necesitas encontrar la manera de que ambos funcionen en la pista de pruebas.

Además, los autos de producción están empezando a tener algo de éxito. Al jefe del equipo le interesa mantener el espíritu competitivo publicando una clasificación de los autos de producción.

1. Haz que los autos se puedan conducir en la misma pista de pruebas

Agrega un método a la interfaz IRemoteControlCar para exponer las implementaciones de Drive() para los dos tipos de auto.

TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown

2. Permite comparar la distancia recorrida por los distintos modelos en la pista de pruebas

Agrega una propiedad a la interfaz IRemoteControlCar para exponer las implementaciones de la propiedad DistanceTravelled para los dos tipos de auto.

var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20

3. Permite clasificar los autos de producción

Implementa la interfaz IComparable<T> en la clase ProductionRemoteControlCar. El orden de clasificación predeterminado de los autos debe ser el orden ascendente de victorias.

Implementa el método estático TestTrack.GetRankedCars() para que devuelva los autos que recibe ordenados de forma ascendente por número de victorias.

var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
C# Exercism

¿Todo listo para empezar Competencia de control remoto?

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