Rutas
/
C#
C#
/
Ejercicios
/
Competición de control remoto
Competición de control remoto

Competición de control remoto

Ejercicio de aprendizaje

Introducción

Interfaces

Una interfaz es un tipo que contiene miembros que definen un grupo de funcionalidad relacionada. Distancia los usos de una clase de la implementación, lo que permite múltiples implementaciones distintas o admitir un 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, salvo que los métodos y las propiedades aparecen solo como la firma y no se proporciona ningún 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 de instancia y propiedades, entre otros miembros.

Ordenación

Para que un objeto se pueda comparar con otro objeto, debe implementar la interfaz IComparable<T>. Esta interfaz tiene un único método que hay que implementar: int CompareTo(T other).

El método CompareTo puede devolver tres valores distintos:

  • 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 seguir trabajando con los coches teledirigidos.

Se ha desarrollado un coche experimental y la pista de pruebas debe adaptarse para manejar tanto los modelos de producción como los experimentales. Ya se han construido los dos tipos de coche y tienes que encontrar la manera de lidiar con ambos en la pista de pruebas.

Además, los coches de producción están empezando a tener cierto éxito. El jefe del equipo está muy interesado en mantener el espíritu competitivo publicando una clasificación de los coches de producción.

1. Permitir que los coches se conduzcan en la misma pista de pruebas

Añade un método a la interfaz IRemoteControlCar para exponer las implementaciones de Drive() de los dos tipos de coche.

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

2. Permitir que se compare la distancia recorrida por los distintos modelos en la pista de pruebas

Añade una propiedad a la interfaz IRemoteControlCar para exponer las implementaciones de la propiedad DistanceTravelled de los dos tipos de coche.

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

3. Permitir clasificar los coches de producción

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

Implementa el método estático TestTrack.GetRankedCars() para que devuelva los coches pasados ordenados de forma ascendente según el 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 pestaña nueva
C# Exercism

¿Listo para empezar Competición de control remoto?

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