为什么选择神奇宝贝? 为什么不? 我的许多同龄人都是在神奇宝贝上长大的,或者现在有孩子在看神奇宝贝。 而且,许多初学者都难以掌握面向对象编程的基础知识。 我希望将四个核心原则与许多人已经看到的东西结合起来将有助于它的点击。 通过使主题不太抽象(具有讽刺意味)和更相关,可以帮助某人掌握基础知识。 我们还能要求什么? 因此,让我们开始吧!
注意:如果您不关注Poké星期一,这篇文章可能没有多大意义。
What is Object Orientated Programming?
第一; 面向对象编程(OOP)是一种编程语言模型,其中对象相互通信以解决问题。 对象是可以重复使用的代码段,因此您不必总是重写它。 在类中使用对象,而类只是这些对象的蓝图。 通过使用这些蓝图(或类),您可以创建这些对象的实例,这些实例实际上只是从该蓝图构建的原始对象的版本。
好的,在一小段中有很多内容,但是在继续之前,了解这一点很重要。 这也是整篇文章中唯一不使用神奇宝贝来帮助您学习的部分,因此请确保在阅读休息之前掌握这些概念。对象用于类中。班级是蓝图。执行个体对象是从这些类中构建的。
Encapsulation
封装是将功能和数据组合到一个类中的过程。 数据不是直接访问,而是通过类中的函数访问。 封装的重点是限制对对象组件的访问,以便用户不会直接修改对象。
将封装视为Pokéball。 不管它在内部如何工作,每个人都知道如何使用它。 宠物小精灵培训师不必知道它为什么起作用,他们只需要知道如何扔它并按照规则进行比赛即可。 在编程中,用户除了您提供的界面外,无需了解其他任何信息,而只希望向他们提供对相关信息的访问权限。 这称为信息隐藏,这一点很重要。
为了正确使用封装,您将需要使用访问修饰符。 不同的语言使用不同的访问修饰符,但是在Java中,它们是:
上市:应用程序中任何地方的代码都可以访问它。 私人的:只有同一类中的代码才能访问它。 默认:当您没有为类定义访问修饰符时,将使用默认的访问修饰符。 同一类和包中的代码可以访问该代码。 受保护的:受保护的类具有与默认访问相同的访问权限,并添加了具有访问代码能力的子类。
Inheritance
编程中的继承是当一个类从另一类获取属性时。 在Java中,一个类只能从另一个类派生。 我们称原始类为父类(或超类)。 派生类称为子类(或子类)。 相比之下,这就是神奇宝贝真正开始发光的地方。 还记得进化吗? 还记得Charamader变成Charmeleon的时候。 这实际上是继承的一个很好的例子。
假设您有一个Charmader(超类),并且它知道两个基本步骤。 划伤和烧伤。 突然,您的Charmander足够强大,可以进化,并变成Charmeleon(子类)。 Charmeleon学习了一个名为Flamethrower的新举动,但它仍然可以使用Scratch and Burn,因为它继承了Charmander(是超类)的那些能力。 哇,这样说得对吗?
那是面向对象编程中继承的基本概念。 如果您正在编写程序,则不想一遍又一遍地编写相同的代码,这效率不高,并且是一场噩梦。 相反,您可以使用新的子类扩展父类,并且父类的所有原始属性都将扩展到子类。 结果相同,效率更高,但工作量却少得多。
Polymorphism
多态性是采取多种形式的能力。 在编程中,多态性意味着根据对象的数据类型对对象进行不同的处理。 换句话说,如果您有一个方法,则对于某个类动作,它可能具有多个实现。 在应用程序运行时(运行时),它将决定要做什么。
在《神奇宝贝》中,两个角色同上和伊夫突出显示了这种能力。 让我们以Eevee为例。 如果您有一个名为Eevee的父类,并且具有多个子类(Vaporeon,Leafeon,Jolteon等),然后让Eevee与Evolution Stone接触,则会调用相应的子类。 因此,如果Eevee接触到水石,则Vaporeon子类将在运行时触发,并且Vaporeon代码将与Leafeon,Jolteon等相对使用。
那么如何使用多态呢? 在Java中,多态可以是静态的也可以是动态的。 方法重载是静态的,方法重载是动态的。超载之所以被认为是静态的,是因为所调用的方法是在编译时确定的。 当共享以下方法的方法使用重载时一样的名字根据传递给该方法的参数的不同,其行为也有所不同。 这是代码示例:
public class Eevee {
public void sound () {
System.out.println("Eevee");
}
public void sound (int num) {
for (int n : num) a
{
System.out.println("Eevee");
}
}
}
覆写 is considered dynamic because it is resolved at runtime. 覆写 means that a derived class is implementing a method of its parent class. If that sounds confusing, think about the Eeveelution example we talked about. Here it is in code form:
class Eevee{
public void sound(){
System.out.println("Eevee");
}
}
class Vaporeon extends Eevee{
public void sound(){
System.out.println("Vaporeon");
}
}
public class OverridingTest{
public static void main(String [] args){
Eevee eevee = new Vaporeon();
eevee.Vaporeon();
}
}
在此示例中,“ Vaporeon”将是输出。
Abstraction
抽象是仅向用户显示相关数据并隐藏不必要的信息的过程。 神奇宝贝的一个很好的例子是与朋友交易。 在此过程中,肯定会有很多幕后发生。 正在传输大量数据,正在更新文件,并且确实在实例化对象。 但是,对于用户而言,您所看到的只是您的Pokéball被机器吸走并在新的Pokéball降落在您面前之前消失。 这是抽象的。 而已。 它并不需要变得更加复杂。
Wrap it up
毋庸置疑,这是对面向对象编程的简化解释,但我希望本文能对可能一直在努力理解概念的人有所帮助。 与大多数事情一样,编程是一种技能,需要掌握大量练习。 如果这些概念没有完全意义,则应更深入地研究它们,因为它们是OOP的核心基础。 拥有坚实的基础是培养技能的最佳方法。 我将把所有必用的皮卡丘GIF留给大家。 谢谢阅读。