Face_to_object_design
二、实例 
掷骰子游戏:三粒骰子,掷两次,比较两次的结果。 
1.提炼 
提炼对象:三粒骰子、游戏 
提炼对象的属性和功能:掷骰子、比较点数 
骰子: 
属性:点数 
功能:随机获取一个1~6之间的整数值。 
游戏: 
属性:三粒骰子 
功能:掷骰子(三粒)、比较点数 
2.描述对象 
骰子类 
3.创建对象 
类名  对象变量名; 
对象变量名=new 类名();//调用构造方法初始化 
4.调用对象 
属性:对象名.属性名 
方法:对象名.方法名(参数列表) 
三、类的声明与定义 
类是对某一类事物的抽象描述。用类创建对象。抓住“属性”、“功能”。 
类是Java程序的基本元素。一个Java程序由若干个类构成。类是Java中重要的一种”数据类型“,类声明 
的变量称为对象。 
格式: 
import java.util.Random; 
//骰子类 
public class SaiZ { 
    int value;//点数 
    Random rnd=new Random(); 
//随机得到一个点数 
    public int getValue(){ 
        value=rnd.nextInt(6)+1; 
        return value; 
} 
} 
public class Game { 
    SaiZ saiZ[]=new SaiZ[3]; 
    public Game(){ 
        for(int i=0;i<saiZ.length;i++) 
            saiZ[i]=new SaiZ(); 
} 
    public int f(){ 
        int s=0; 
        for(int i=0;i<saiZ.length;i++) 
            s=s+saiZ[i].getValue(); 
        return s; 
} 
    public boolean compare(int n1,int n2){ 
        if(n1>=n2) 
    return true; 
        else 
    return false; 
} 
} 
访问控制符:public、private、default、protected 
class:关键字,用来定义类 
类名:自定义、符合Java标识符规则、驼峰命名法(类名,多个单词组成,每个单词首字母大写; 
变量和方法,首字母小写,其余单词首字母大写;常量所有字母大写)、见名知意。 
类体:只能有成员变量和成员方法。 
成员变量:在类内部声明的变量,它隶属于该类的对象。 
成员变量的操作:只能在方法内部进行。 
四、对象的创建 
类是一种重要的数据类型。可以用来声明变量。它声明的变量称为对象。 
引用数据类型和基本数据类型不同,当用类声明对象后,还必须创建对象。即为声明的对象分配所拥有 
的变量(确定对象所具有的属性)。当使用一个类创建一个对象时,也称给出了这个类的一个实例。通 
俗地讲, 
类是创建对象的模板,没有类就没有对象。 
五、构造方法 
一个特殊的方法 
方法名称与类名完全相同。 
如果声明类时,没有显式声明构造方法,系统会自动创建一个默认参数为空的构造方法。如果声明 
了,则不再自动创建。 
构造方法没有返回值。一定不要写void 
构造方法必须使用new调用。不能通过“对象名.方法名()”调用 
构造方法也可以重载,提供多种创建对象的方法 
1.作用 
创建对象、实例化对象。为对象的成员变量分配内存空间,并初始化。 
2.构造方法的重载 
目的:为用户提供多种创建对象的方法。初始化对象的成员变量。(为它的成员变量赋初值) 
[访问控制符] class 类名{ 
成员变量的声明; 
成员方法的声明(){} 
} 
public class Demo1 { 
    String name; 
    public void init(){ 
        name="张三丰"; 
} 
} 
类名 对象名;//声明对象 
对象名=new 类名();//创建对象,为对象的成员变量分配内存 
六、对象的内存模型 
声明对象变量后,在没有使用new运算之前,该对象为空,称为空对象,不能使用。 
public class Demo1 { 
    public static void main(String[] args) { 
        Person p1=new Person(); 
        p1.printInfo(); 
        Person p2=new Person("张三丰"); 
        p2.printInfo(); 
        Person p3=new Person("张无忌","男"); 
        p3.printInfo(); 
        Person p4=new Person("赵敏","女",20); 
        p4.printInfo(); 
} 
} 
使用new运算调用类的构造方法后,则为对象的成员变量分配内存空间,并初始化(即赋初值)。 
一个类可以通过new运算创建多个不同的对象。这些对象的成员变量将被分配不同的内存空间 
new运算只能和构造方法一起使用 
七、对象的使用 
抽象类的目的,写一个类的目的是创建对象。类具有属性和行为,所以说,对象也具有属性和行为。对 
象不仅可以操作自己的变量改变自身的状态,还可以调用类的方法产生一定的行为。 
操作其本身的数据:对象名.属性名 
调用方法:对象名.方法名(参数列表) 
八、Java的程序结构 
一个Java程序由若干个类构成。但是Java程序至少要包含一个主类(包含main方法的类)。Java程序从 
主类的main方法开始执行。 
九、面向对象编程练习 
扑克牌游戏,ATM取款机,面向对象的程序设计思想,分析程序。该程序中有哪些对象,每个对象应该 
具有哪些属性和方法。只需要写出属性和方法的名称即可,并不需要实现。用我们语言描述即可。 
1.ATM取款机 
对象:银行卡、ATM取款机 
数据:银行卡号、银行卡密码、卡内余额、机内余额 
行为:查询余额、取款、存款、转帐、修改密码、显示欢迎信息、主菜单 
银行卡: 
属性:卡号、密码、余额 
行为:查询、取款、存款、转帐、验证 
ATM机: 
属性:银行卡、余额 
行为:显示欢迎信息、主菜单、验证用户身份、查询、取款、存款、转帐 
2.扑克牌 
对象:52张扑克牌(52个对象)、游戏 
扑克牌: 
属性:花色、大小、图像 
行为:输出面值(得到该扑克牌的图像) 
游戏: 
Exception in thread "main" java.lang.NullPointerException 
at demo1.Demo1.main(Demo1.java:14) 
空指针异常,产生的原因就是没有对对象变量使用new运算,也就是说没有调用其构造方法,初始化对 
象。 
属性:52个扑克牌对象 
行为:初始化每一个扑克牌对象(对它的花色、大小赋值) 
洗牌(打乱顺序) 
抽牌 
比较两张牌的大小 
public class MyCard { 
    int color; 
    int value; 
    public MyCard(int color, int value) { 
        this.color = color; 
        this.value = value; 
} 
    private String getValue(int n){ 
        if(n<=10){ 
            return n+""; 
        }else if(n==11){ 
            return "J"; 
        }else if(n==12){ 
            return "Q"; 
        }else if(n==13){ 
            return "K"; 
        }else{ 
            return "A"; 
} 
} 
    public String getFaceValue(){ 
        switch (color){ 
        case 1: 
            return "黑桃"+getValue(value); 
        case 2: 
            return "红桃"+getValue(value); 
        case 3: 
            return "梅花"+getValue(value); 
        default: 
            return "方块"+getValue(value); 
} 
} 
} 
public class MyGame { 
    MyCard[] myCards=new MyCard[52]; 
    Random rnd=new Random(); 
    public void init(){ 
        int k=0; 
        for(int i=1;i<=4;i++){ 
            for(int j=2;j<=14;j++){ 
                myCards[k++]=new MyCard(i,j); 
} 
} 
} 
微信公从号二维码 
    public MyCard getCard(int n){ 
        return myCards[n]; 
} 
    public void xiPai(){ 
        for(int i=0;i<myCards.length;i++){ 
            int n=rnd.nextInt(52); 
            MyCard temp=myCards[n]; 
            myCards[n]=myCards[i]; 
            myCards[i]=temp; 
} 
} 
    public void printCards(){ 
        for(int i=0;i<myCards.length;i++){ 
            System.out.print(myCards[i].getFaceValue()+" "); 
            if((i+1)%13==0) 
                System.out.println(); 
} 
} 
} 
public class StartGame { 
    public static void main(String[] args) { 
        MyGame myGame=new MyGame(); 
        myGame.init(); 
        myGame.printCards(); 
        System.out.println(); 
        myGame.xiPai(); 
        myGame.printCards(); 
        System.out.println("你抽到的牌是:"+myGame.getCard(10).getFaceValue()); 
} 
}
Face_to_object_design的更多相关文章
随机推荐
- SQLMap使用指北
			
简介 sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限.它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存 ...
 - 在Centos7下docker配置自动化环境镜像(python3.7+selenium 3.11+firefox 62+geckodriver 0.21)
			
最近在学习Docker,准备做自动化测试代码集成的功能.如下文章的前提是已经安装好linux系统,且成功安装好Docker. 接下来我会按步骤一步一步的对自动化需要的一些环境进行安装,如果没有特别说明 ...
 - Gif开发笔记(一):gif介绍、编译和工程模板
			
前言 实现gif图片的解码和生成. Gif 简介 GIF格式的名称是Graphics Interchange Format的缩写,是在1987年由Compu Serve公司为了填补跨平 ...
 - 权威部门接连下发文件,Panda交易所带你走进区块链概念股
			
Panda交易所获悉,7月21日,北京市地方金融监督管理局发文<北京股权交易中心获得首批开展区块链试点建设资格>,文中表示证监会7月7日发布<关于原则同意北京.上海.苏州.浙江.深圳 ...
 - AcWing 295. 清理班次
			
这题显然跟 区间覆盖 是一样的,而且值域在 \(1000000\) 以内,不用离散化,直接贪心求解即可. 具体地:设 \(nxt[i]\) 为从值域 \(i\) 出发,能到达最远的右端点. 一段段地跳 ...
 - uni-app中封装统一请求函数
			
封装统一请求函数有利于项目的维护 整体功能简单实用,但小编遇到一个巨坑,项目中在vue文件使用跳转方法,url参数输入 "/" 后工具提示的路径为 "/pages/log ...
 - 【php安全】eavl函数禁用适用于 php7.* php5系列
			
php5.4 安装扩展demo php安装suhosin扩展 php版本与suhosin版本: suhosin-0.9.38 支持到php 5.4 php5.4 5.5 5.6 需安装 https:/ ...
 - JUC(二):CAS及ABA
			
CAS是什么? 比较并交换. CAS示例 package com.chinda.java.audition; import java.util.concurrent.atomic.AtomicInte ...
 - [日常摸鱼]loj6000「网络流 24 题」搭配飞行员
			
题面 应该是二分图匹配,不过我写的是网络最大流. dinic求二分图最大匹配:加个源点和汇点,源点连向二分图的一边所有点,二分图的另一边所有点连向汇点,很明显这样得到的最大流就是这个二分图的最大匹配. ...
 - windows jupyter lab中.ipynb转中文PDF
			
在jupyter lab中,File-Export Notebook as-Export Notebook to PDF,可以导出成PDF格式的文档,但在操作前需要安装些程序.1. 安装pandocA ...