中职语文出版社《面向对象程序设计C#》单元7 使用面向对象思想重构ATM系统教案

资源下载
  1. 二一教育资源

中职语文出版社《面向对象程序设计C#》单元7 使用面向对象思想重构ATM系统教案

资源简介

单元7 使用面向对象思想重构ATM系统
课 时
本章目标:
理解面向对象语言的特点
掌握类的概念和定义
了解对象的意义和实例化对象
了解成员方法的定义
掌握构造方法的作用和定义
理解命名空间
理解访问修饰符的使用
理解什么是值类型和引用类型
本章重点:
理解面向对象语言的特点
掌握类的概念和定义
了解对象的意义和实例化对象
了解成员方法的定义
掌握构造方法的作用和定义
理解什么是值类型和引用类型
本章难点:
了解成员方法的定义
掌握构造方法的作用和定义
理解什么是值类型和引用类型
内容讲解:
面向对象
1、知识点引入
面向对象是由面向过程演变而来,这两者其实都是人们生活方式中演变的。最早的面向过程具体是完成一件事的过程,强调的是完成事情的动作;具体是什么意思?举个列子:
把大象装进冰箱里:1、打开冰箱 2、把大象赛进去 3、关闭冰箱门
大家肯定会说,这一系列的步骤是没有错的,也符合人的思维逻辑,面向过程是没有问题的,那为什么会变成如今的面向对象?我们继续举例,还是上面的大象:
首先上面的动作是不是需要人完成,那先定一个又瘦又矮的孙权来完成动作:
孙权踩着凳子打开冰箱(装大象的冰箱肯定很大,孙权瘦小,打开需要凳子)
孙权找人把大象装进冰箱
孙权踩着凳子关闭冰箱门
那如果孙权是又高又胖的人完成上面的动作,比如又胖又高的张飞:
张飞自己打开冰箱
2、张飞自己把大象装进冰箱
3、张飞自己关闭冰箱门
所以面向过程的思想解决同一件事的时候,执行者不一样的,需要为每个执行者量身定做解决方法,这就是面向过程。如果写成程序,同一件事要写无数次。为了简单化,所以面向对象就产生了,也就是说找个主体帮你做事。并且面向对象到现在都没有一个具体的定义,都是靠自己的理解定义,举个列子:
还是把大象装进冰箱里:以冰箱作为对象
冰箱门可以被打开
冰箱可以被塞进大象
冰箱门可以被关闭
所以孙权:1、2、3,张飞:1,2,3
所以面向对象是面向的个体,找到事件的主体:冰箱就为对象。让冰箱做事,可以减少程序编写。
2、知识点
一、类
面向过程中是主动,把人选为对象,而面向对象是被动,是把门选择对象,但是这个对象具体怎么了解?对于我们程序员来说万物皆对象,就比如孙权,大力水手也可以作为对象,并且他们都是人类,冰箱作为对象,它属于电器类。人类和电器类我们在c#中称为类
我们用这个类字来组词,有类别、分类、物以类聚等,世界上的万物都可以分类;比如说鲨鱼为鱼类。同样说到鸟类,大家会不会想到鸟有翅膀、煽动起来可以飞。所以平常说的类是把相同的特点和行为的事物来定义和归纳,而程序中的类的意义是一样的,把特征为数据,行为为方法
类的概念
类就是相同的特点和行为的事物来定义和归纳
语法
class 类名{
数据;//特征
方法;//行为

Class:表示类
列子:定义一个人类,人类的特征:名字、性别、年龄,
class Person
{
//下面是人这个类所共同具有的特征,也就是数据
public string name;//每个人都有名字
public int age;//每个人都有年龄
//下面是人这个类所共同具有的行为,也就是方法——问候
public void SayHello()
{
Console.WriteLine("你好,我是{0}", name);
}
}
2)怎么使用类
问大家一个问题,你叫人会叫人类吗?并不会,而是通过名字取确定到个体上。同理,我们创建的类,也要具体到某个个体上,这个个体我们称为对象。使用这个对象我们称为实例化对象,语法:
类名 对象名=new 类名([参数])
例子:
//实例化对象
Person per=new Person()
Per.name=”张三”;
Per.age=15;
Per.SayHello();
3)类除了这种写法,还有一种叫匿名类,匿名类型是C# 7.0提供的一个新的语法机制,它使用new操作符和匿名对象初始化器能够创建一个新的对象。这个新创建的对象就是一个匿名类型的对象。下面的代码创建一个匿名类型的对象,并保存为var关键字标识的role变量。
//创建匿名类的对象
var role = new { ID = 1, RoleName = "Admin" };
class Program
{
static void Main(string[] args)
{
//创建匿名类的对象
var role = new { ID = 1 , RoleName = "Admin" } ;
//显示role的RoleName属性值
Console.WriteLine("RoleName:" + role.RoleName);
}
}
二、成员方法
简单的来说,就是定义在类内部的方法,反映这个类的具体行为
语法:
访问修饰符 返回类型 方法名(参数)

方法体

返回类型:1)void 无返回
2)有返回
3)参数是可选
根据参数、类型分类:
1.无参数无返回值类型(void :返回值的类型)
修饰符 void 方法名(){方法体;}
调用:方法名()
2.有参数无返回值类型
修饰符 void 方法名(数据类型 参数1,数据类型 参数2.{方法体;}
调用:方法名(参数1,参数2);
3.有参数有返回值类型
修饰符 数据类型 方法名(数据类型 参数......){
return 表达式(数据类型与方法定义时的数据类型一致);}
调用: 方法名(参数1,参数2);
以有参数有返回类型举例:求两个数a和b的和
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo
{
class Math
{
//该方法需要两个整型参数,并且返回两个整数的和
public int Add(int a,int b)
{
return a + b;
}
}
///


/// 实例化对象,调用方法
///

class Program
{
static void Main(string[] args)
{
Math m = new Math();
int sum= m.Add(5, 10);
Console.WriteLine("和是:{0}",sum);
}
}
三 构造方法
实例化对象,new关键字后面跟类名,然后是一对圆括号(如果没有圆括号就会报错,程序执行不了)。为什么这里有一对圆括号呢?这是类里面有默认构造函数。构造函数有两种:1、无参数的构造函数(默认) 2、有参数的构造函数
作用:构造方法可以更简捷地为对象赋初值
对象的每一个成员变量要存储数据
构造方法只有实例化对象的时候才能调用,不能像其他方法那样通过方法名调用。
1、无构造函数语法:
Publlic 类名()
{
}
2、有参数的构造方法
Public 类名参数){}
注意:
构造方法名必须与类名是一样的。
构造方法没有返回值类型,因为构造方法没有返回值。
定义学生类,有学生编号、姓名、年龄、班级编号,使用构造函数赋值
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo
{
class Student
{
public string id;//学生编号
public string name;//学生的名字
public int age;//学生的年龄
public string classid;//学生所在班级编号
//不带参数构造方法
public Student()
{
}
//带参数构造方法,参数写在圆括号里,在代码里面给对象的每个成员变量赋值
public Student(string Id, string Name, int Age, string Classid,
)
{
this.id = Id;
this.name = Name;
this.age = Age;
this.classid = Classid;
}
public void Study()
{
Console.WriteLine("我是{0},我要好好学习,天天向上!", name);
}
}
///
/// 实例化对象,调用方法
///

class Program
{
static void Main(string[] args)
{
//实例化一个对象时,就调用了构造方法,把初始值按顺序写到圆括号里面,
//就为对象赋值了,非常方便简捷
Student stu = new Student("a001","张明",18,"T88");
}
This:指当前类,它的作用是引用你当前正在操作的这个对象
四 命名空间和访问修饰符
一个项目中的类有很多,怎么去管理这些类?就通过命名空间,命名空间是为了把一些类更好地管理而定义的,把这些类和实体集合起来的一个团体。关键字namespace。
比如:下面示例在项目里面添加了一个类文件,把Student类单独写到添加的类文件里面,自定义了命名空间——MyNameSpace:
using System;
using System.Collections.Generic;
using System.Text;
namespace MyNameSpace
{
class Student
{
public string id;
public string name;
public int age;
public Student(string Id, string Name, int Age)
{
//使用this关键字,表示给当前的对象成员赋值
this.id = Id;
this.name = Name;
this.age = Age;
}
public void Study()
{
Console.WriteLine("我是{0},今年{1}岁", this.name, this.age);
}
}
}
再次创建另外一个命名空间为
using System;
using System.Collections.Generic;
using System.Text;
using MyNameSpace;//预先引入命名空间
namespace Demo
{
///
/// 引入命名空间
///

class Program
{
static void Main(string[] args)
{
Student stu = new MyNameSpace.Student("a001","张明",18);
Student otherstu = new MyNameSpace.Student("a002", "王飞", 21);
//调用stu对象的Study方法
stu.Study();
}
}
}
那我们怎么在demo空间中使用到MyNameSpace空间下的内容,比如学生名字等。这就是因为我们创建name时都加了public,这个为访问修饰符,访问修饰符有:
访问修饰符 说 明
public 公开的,无限制条件,任何代码都可以访问
internal 可被同一个程序集的所有代码访问,在学习
protected 可被自己或者子类的代码访问,在学习
private 私有的,只有自己的代码才能访问
值类型和引用类型:
在我们了解的数据类型中的int、flaot等都属于值类型,怎么分类的?首先了解什么是值类型?
1)值类型
直接存放其值,表示实际数据
例子:定义2个变量,分别是a=1,把a的值赋值给b,有给b的值等于8
Int a=1;
Int b=a;
B=8;
输出a和b的值
3)引用类型
存放的是数据在内存里面的地址,读取的是数据存放地址。比如数组,实例化的类
3)值类型与引用类型的区别
值类型做参数使用时:修改形参的值,实参的值不会发生改变
引用类型做参数使用时:修改形参的值,实参的值会发生变化
4)值类型与引用类型的转化
1.值类型转换为引用类型:装箱
2.引用类型转换为值类型:拆箱
教育改变生活(We Are Changing)

展开更多......

收起↑

资源预览