前言:面向对象编程是现如今编程的大环境,所以再次回顾面向对象的知识是非常有必要的。
一:类与对象
1:软件系统
输入{用户界面} 运算{业务逻辑}
存储{数据库} 输出{界面或其他文件}
2:对象的了解
对象是身边的一些常见的事物,主要了解对象之间区别;
对象区分的重要因素:
静态特征(属性,表示对象“什么样子”)
动态特征(方法,表示对象“能干什么”)
3:面向过程和面向对象
面向过程:就是比较注重做每一件事情的过程,步奏,流程。关注点为小的细节
面向对象:是具有一些特性和动作的东西,关注点为最后的结果。
4:理解面向对象编程
*它的核心是对象
*对象为现实世界的实体,而面向对象编程就是将这些实体模拟到计算机程序中,实现相关的功能。
*根据需要编写各种对象,并将其对象建立一定的关系;
5:封装的概念
*就是将一些小的对象放在一起,然后以一个新的对象呈现出来,封装使得一个对象的内部变得隐藏,从而更加安全;
*将属性和方法放在一个类里面,类就可以看做是一个黑箱,只能在外面看到一些公共的方法和属性。<模块化和数据隐藏>
*定义用操作方法把数据封闭到类中,形成以数据为核心,方法为外壳的类。
6:类的概念
*对象是类中的一个实例,将对象的共同特征抽取出来,这些共同的属性和方法被组织在一个单元中,就被就做类;
*类是具有相同属性和共同方法(行为)的一组对象的集合
*类的属性:对象或实体所拥有的静态特征,在类中表示称为类的属性;
*类的方法:对象或实体所拥有的动态特征,在类中表示为类的方法;
7:类与对象的区别 <自行车和设计自行车图纸的关系>
*类是一个概念模型,在这个模型中,规定对象的属性和方法;
*对象是一个实体;
8:类模版的定义
访问修饰符 class 类名
{
定义字段;
定义属性部分;
定义方法部分;
}
*定义类名:名词,首字母大写Passal命名法;
*编写类的字段,属性;*编写类的方法,接口;【独立完成某个功能的单元模版】(学会理解类的组成,并且在这其中要学会应用)
9:字段:叫做成员变量(全局变量);
{字段和属性都是用来描述类的静态特征}方法中定义的变量叫做局部变量;二者的作用域不同;
10:对象的创建过程
Static void Main(string []ardes) { //定义字段 Private int studentId; Private string studentName; //定义属性 Public int StudentID { get{return studentId;} Set{studentId=value;} } Public string StudentName { get{return studentName;} set{studentName=value} } //获取信息{定义方法} Public string GetStudent() { String info=string.format(“姓名:{0},学号:{1}”,studentName,studentId); Return info; } }
11:关于对象的调用
//创建对象 Student objStudent=new Student(); //给对象属性赋值 objStudent.StudentId=1001; objStudent.StudentName=”阿辉”; //显示对象的属性(调用方法) String info=objStudent.Getstudent(); //类名.方法名 Console.writeline(info); Console.readline();
二:字段与属性
1:访问修饰符
作用:限制对象的属性或方法可访问的范围(作用于类的内部和外部)
类型:
private(私有的:外部不可见,不可访问,只在本类可以访问,默认的)
Public(公有的:外部可见,外界可以访问)
Protect(受保护的:只在本类和子类中被访问)
Intemal(只在本项目中被访问)
2:在方法中如果去掉public,则系统自动变为private,对于private修饰符外界不可访问,如果访问会报错,而且通过(.运算)不可自动出现;
3:字段(类的成员变量)
字段一般用private来修饰(是我们的私有财产),通常只供类的内部的不同方法使用;
4:属性(描述静态特征){是什么,具有什么特有的属性}
字段私有化,属性是公有化;其中有get();set();通过value将外部值赋私有字段;
属性是外界访问私有字段的入口,属性本身不保存任何数据;属性中的get,set;
Get为读取时返回字段的值,set外部来赋值;
5:使用属性避免非法数据{在get,set中加入if,,else进行判断}
6:可以将属性设置为只读;{无set方法,无法为其赋值}
7:没有对应私有字段的属性,属性内部可以添加如何需要的业务代码,如方法的调用;{其属性处理属性的能力超强}
8:字段与属性比较
字段(成员变量)为类的内部做数据交互,字段一般是private(私有的)的;可以为其赋值,也可以获取字段的值,当需要为外部提供数据时,请将字段封装为属性,不要去使用共有的字段;
属性一般向外界提供数据,主要描述数据对象的静态特征,一般用public,可设置为只读,只写属性,提高数据的安全性。也可以在内部添加业务逻辑,避免非法数据;
三:类的方法和构造方法
1:方法表示一个类或对象能够实现的操作,即对象的动态特征。一个类中主要是通过方法把字段和属性的值传递出去;
分类:实例方法,静态方法,构造方法,抽象方法,虚方法;
2:方法的作用
*规定了类主要实现的功能;
*方法封装在类里面,外界调用时不需要了解内部细节,体现了其“高内聚”“低耦合”特性;
3:书写类中方法的错误集合
*忘记返回值,提示并非所有路径代码都有返回值;
*返回值定义的类型与返回值数据的类型不同;
*变量在使用中超出作用域
4:构造方法的调用优先与其他的方法,其中参数的传递和一般的方法传递一样;
这里的调用是因为我们每一次使用对象的时候都会New一下,这里就调用了类中默认的构造方法,这里可以进行重载的实现,当你想为其进行初始化时。
5:构造方法可以进行初始化,使用有参数的构造方法可以避免用户单个初始化对象属性的麻烦;在构造方法中统一初始化就可以使程序变得更加美观;
6:构造多个构造方法
构造方法自身调用时用{:this(stuld,stuName)}完成自身方法的调用;
7:构造方法与实例方法的区别
构造方法:
*用于对象的初始化,一个类中至少有一个构造方法;
*不能显示调用,只能在创建对象时使用new来调用;
*无返回值;无括号包裹;
*构造方法名称必须与类名一样;
实例方法:
*用于表示对象能够干什么,一个类中可以没有任何实例方法;对象的动态特征;
*只能显示调用:对象名.方法名。
*可以有返回值,没有时必须以void表示;
*方法的命名要有意义,不能与类名相同;
8:对象初始化器
中间的语句块,必须以“,”分隔;
*只能初始化属性值;
*只能在调用者中使用,而构造方法初始化必须写在类中;
9:方法的重新定义(三种)
10:this关键字
*this表示当前类的对象,用于访问该类成员变量或方法;
*当成员变量和局部变量重名时使用this区分;
这里还有个base关键字,当我们的类继承字别的类时,我们通过base来直接使用父类。