前言:之前类比游戏介绍了一些基础,接下来我们开始接触Java核心之一——面向对象编程,仍采用类比游戏的方式(这次从开发者、设计师的角度)
4.1面向对象编程(设计开发角色)
面向对象与面向过程
二者皆为重要的编程思想。以游戏角色为例,面向对象侧重于角色,强调的是一系列行为归属于我们的角色;而面向过程侧重于角色的动作、行为,如角色打怪,跑图,休闲娱乐等等,强调的是这个过程。
术语解释:
面向对象_百度百科面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1
面向过程_百度百科“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。简写为POP。https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E8%BF%87%E7%A8%8B
面向对象的思想
类 → 角色设计图(唯一) 对象 → 角色(很多)
角色设计完成 → 角色创建
我们将角色设计图做好之后,就可以创建出多种角色,但是,我们可以看出,角色设计是关键的一步,所以面向对象程序设计的重点是类的设计
怎样定义类?——定义类中的成员(成员变量和成员方法)(是不是不太理解?-?)
这样试试:怎样创建游戏角色?——创建角色的模型(角色的属性和角色的行为)
(如果还是理解不好如何定义类,之后还会接触,不着急~)
用面向对象的思想分析问题
例:战士要跑去副本打小怪
类:战士、怪
战士的方法动作:跑(去副本){ } 打(小怪){ }
小怪的方法动作:被打(){ } 反击(){ }
方法:战士{ 跑(去副本){ } } 小怪{ 被打(){ } 反击(){ } }
4.2类
我们最开始写的HelloWorld其实就是一个Test类 ,类名就是我们起的名字。
public class Test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
定义类(类 = 属性 + 方法)
class Character {
String name; //角色的昵称
String gender; //角色的性别
String career; //角色的职业
int atk; //攻击力
int defence; //防御值
int healthPoint; //血量
int magicPoint; //魔法值
//以上都是角色的属性(成员变量)类成员变量可以不用初始化,自身有默认值
//String类的默认值为null,int类默认值为0
public void move() { //空参
System.out.println("角色移动");
}
public void attack(String monster) { //带参
System.out.println("角色打的是:"+monster);
}
//以上都是方法(角色的行为)(成员方法)(函数)
}
类以及类的成员(角色及角色属性和行为)
Java可以描述世间万物,万物皆对象(别问,问就是你还没有/doge),如果把Java代码看作一个世界,那么世间万物可以抽象成一个个的class类。
属性 Field(成员变量&角色的属性)对应类中的成员变量(比较抽象,用游戏来说,就是角色的属性,攻击、防御、抗性等)
成员变量又分为实例变量(无static修饰)和类变量(静态变量)(以static修饰)
属性的格式:
修饰符(不写默认为default) 类型 属性名 = 初值(可以不用初始化);
修饰符—public:该属性可以被本类以外的方法访问
修饰符—private:该属性只能由本类的方法访问
(怎么理解?public:角色资料中的某一项或几项公开,private:角色资料中的某一项或几项私密)
例:
public class Character {
public String name; //名字公开,可以被本角色以外的其他角色访问
private String gender; //性别私密,只能由本角色自己访问
public int id = 123456; //id公开,可以被本角色以外的其他角色访问
}
成员变量之实例变量和类变量(静态变量)
实例变量,就是在我们将类实例化成对象之后才可以使用(我们在上边类中声明的变量就是实例变量,无static修饰),需要先创建对象,再用 对象.属性 的方式调用
类变量,也称静态变量,不需要实例化成对象就可以直接使用,通过 类名.属性 的方式直接调用
例:
//这是在定义一个角色类(创建角色)
//
class Character {
public static int hp = 100; //类变量 hp = 100
public int mp = 100; //实例变量 mp = 100
}
//这是在主方法中调用成员变量
//
public class Test{
public static void main(String[] args){
int a1 = Character.hp; //因为 hp是类变量,所以可以直接用我们定义的角色类直接调用
//int a2 = Character.mp;就是错的,因为 mp是实例变量,需要我们先创建对象
Character c1 = new Character(); //为 c1开辟内存,即创建对象(一个具体的角色)
int a2 = c1.mp; //这是正确调用实例变量 mp的方式,即先创建对象,再用对象.属性的方式调用
}
}
方法 Method(成员方法&函数&角色的行为)
对应类中的成员方法(角色的行为、动作,如跑图、打怪、刷经验、挂机等)
方法的格式:
修饰符 返回值类型 方法名( 参数列表 ){ 方法体语句; }
return语句传递返回值,无返回值时返回值类型为void(空的)
例:
public class Character{
String name;
public String getName() { //声明方法 getName,返回值类型为 String(字符串)
return name; //使用 return语句返回 name的值
}
public void setName() { //声明方法 setName,无返回值类型
name = "ZhangSan"; //将字符串 ZhangSan赋给 name
}
}
未完待续··· =_=



