1

我不熟悉 OOP 概念(抽象、封装、继承和多态)。

有人可以使用 SPORTS 示例来解释 OOP,例如可以有子类(足球、橄榄球、板球、拳击、斯诺克等)的运动。

还有什么是运动员管理系统的基本结构。

任何帮助将不胜感激。

非常感谢。

4

1 回答 1

4

这是一个非常笼统的问题,不容易准确回答,但这里有一些建议,希望至少能给你一些关于继承和多态的想法。

  • 所有运动(概念)实际上都是Sport(类)的实例。这意味着类FootballBoxing等等,都继承自类Sport
  • 可以在 中完成的事情,可以Sport在 的任何子类中完成Sport,因为它实际上是一项运动。例如,如果Cheer()Score()win()被定义为 中的方法Sport,那么每个子类也可以执行这些 - 这就是继承!
  • 然而,每项运动可能有不同的计分方式。如果是这样,他们可以重写 from 的方法Sport,并为此提供自己的逻辑。但是,它们仍必须符合 中Score()设置的方法的定义Sport,以便它们能够像Sport. 这就是多态!
  • 欢呼和胜利在所有运动中可能是同一个概念,所以它们可以继承自Sport

一个简单的伪代码示例。这可能非常愚蠢(甚至在体育术语中甚至在技术上都不正确,但我希望你明白这一点!:))

public class Sport{

    public function score(){ 
        print("Scored!");
    }

    public function Win(){
        print("Won!");
    }

    public function Cheer(){
        print("Cheeeeeeeeer!!!");
    }
}

public class Soccer Inherits Sport{
    public override function score(){
        print("One goal!");
    }
}

public class Boxing Inherits Sport{
    public override function score(){
        print("Knockout!");
    }
}


// Using the classes:
Sport generalSport = new Sport(); // generalSport is just a non-specific sport
Sport soccerSport = new Soccer(); // soccerSport is a Soccer, but also a Sport!
Sport boxingSport = new Boxing(); // boxingSport is a Boxing, but also a Sport!

generalSport.Win(); // This should output: "Won!" (from Sport)
soccerSport.Win(); // ... "Cheeeeeeeeer!!!" (inherited from Sport)
boxingSport.Cheer() // ... "Cheeeeeeeeer!!!" (inherited from Sport)

generalSport.score(); // "Scored!"
soccerSport.score(); // "One Goal", since it was overridden in Soccer
boxingSport.score() // "Knockout!", since overridden in Boxing

提示:想想现实生活中的“是”什么。如果 X 继承了 Y,X 可以专门定义为一个 X,但它仍然是一个 Y,并且可以这样处理(只有添加一些额外属性的可能性)。

于 2013-01-04T15:49:58.800 回答