面向对象的编程学习笔记

  面向对象的编程区别于面向过程的编程,其操作的单元是类,而面向过程操作的单元是方法。即面向过程的编程是由一个又一个的方法组成的。而面向对象的编程是由一个又一个类组成的。相对于面向过程,面向对象的代码复用性更好,代码的隐蔽性更高,并且更加符合人类思维的方式。

  面向对象的最基础的单元就是类。类(Class)是一个抽象的概念,是对某一类事物的描述。例如:猫,狗,人。而对象(object)就是类的实例化。即符合类描述的具体的单个成员。例如我就是Person类实例化的对象。我是符合人描述的具体的单个成员。在创造对象的过程就叫做类的实例化。

  类包含描述某种事物的状态(例如姓名,性别)和行为(唱歌,跳舞,写代码)。

  在.net平台而言,最基本的编程结构就是类类型。正式的说,类是由字段数据(通常叫做成员变量)以及操作这个数据的成员(如构造函数,属性,方法,事件等)所构成的自定义类型。其中字段数据表示状态。

Class Person
{
        //表示自身状态的字段
	String Name;
	String Sex;
        //表示行为的方法
	Public void Sing();
	Public void Dance();
	Public void Coding();
}

面向对象编程(OOP)的三个特性:

1.封装性

   封装是将对象用户(用你编写的类进行编程的人)不必了解的实现细节隐藏起来的一种语言能力。

1     //DatabaseReader封装了数据库操作的细节
2     DatabaseReader dbReader = new DatabaseReader();
3     dbReader.Open(@"C:\AutoLot.mdb");

  和封装编程逻辑紧密相关的概念就是数据的保护概念。理想情况下对象的状态数据都应该是隐蔽的,外部不能直接的访问,只能通过访问函数来进行“有礼貌的访问”。

2.继承性

  继承指的是基于已有的类型来创建心类的语言能力。通过继承,子类可以继承基类(或称父类)的核心功能,并且扩展了基类的行为。

  

  从图中我们可以看出“矩形是图形,图形是对象”这就构建成了一种“is - a”的关系,Is- a关系又称为继承关系。

我们会认为Shape定义了许多派生类都公有的成员(颜色,高度)。由于Rectangle扩展了Shape,它也就继承了由Shape和Object定义的核心功能。同时它还有属于自己独特的功能。

  区别于C++,C#不支持多重继承的概念(所以引入了接口的概念)继承的一个很大的优点就是提高了代码的复用性,OOP中还有另外的一种形式的代码重用:包含/委托模型(has-a关系,也成聚合)这种重用的形式不是用来建立父类和子类关系的。它意味着,一个类可以定义另一个类的成员变量,并向对象用户间接的公开它的功能。

例如构建一个汽车(Car)的类,想表达一辆车中有一个(has-a)收音机的概念。让Car继承Radio类显然是不符合逻辑的。需要的是两个类一起合作,其中Car类创建并公开了Radio的功能。

1 Class Car
2 {
3     Radio _Radio;
4 }
5 Class Radic
6 {
7
8 }

3.多态性

  同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

  实际上就是同一个类型的实例调用“相同”的方法,产生的结果是不同的。这里的“相同”打上双引号是因为这里的相同的方法仅仅是看上去相同的方法,实际上它们调用的方法是不同的。

  当CirCle和Rectangle都调用Draw()的时候,看似这两个实例调用了“相同”的方法,但是实际上,它们是调用各自的Draw()方法。所以只是看似相同,实际上是不同的方法。并且产生了不同的执行结果,这就是多态性。

  同时,这里讲的多态性也只是简单的多态性。多态性用来当基类规定好一些实现的方法时,子类只需要重写这些方法就好。这样增强了代码的复用性。

时间: 2024-11-10 01:12:18

面向对象的编程学习笔记的相关文章

Java并发编程学习笔记

Java编程思想,并发编程学习笔记. 一.基本的线程机制 1.定义任务:Runnable接口 线程可以驱动任务,因此需要一种描述任务的方式,这可以由Runnable接口来提供.要想定义任务,只需实现Runnable接口并编写run方法,使得该任务可以执行你的命令.   class MyTask implements Runnable {    private String mName;     public MyTask(String name) {    mName = name;   }  

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

linux网络编程学习笔记之二 -----错误异常处理和各种碎碎(更新中)

errno 在unix系统中对大部分系统调用非正常返回时,通常返回值为-1,并设置全局变量errno(errno.h),如socket(), bind(), accept(), listen().erron存放一个正整数来保存上次出错的错误值. 对线程而言,每个线程都有专用的errno变量,不必考虑同步问题. strerror converts to English (Note: use strerror_r for thread safety) perror is simplified str

JAVA GUI编程学习笔记目录

1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之GUI编程窗体事件 6.JAVA之GUI编程Action事件 7.JAVA之GUI编程鼠标事件 8.JAVA之GUI编程键盘码查询器 9.JAVA之GUI编程列出指定目录内容 10.JAVA之GUI编程弹出对话框Dialog 11.JAVA之GUI编程菜单 12.JAVA之GUI编程打开与保存文件 13.JAVA之GUI编程将程序打包jar JA

黑马程序员_JAVA UDP网络编程学习笔记

一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的,它们构成了两个端点之间的虚拟通信链路.与TCP通信不同,UDP是面向无连接的.不可靠的基于数据包的传输协议.即应用进程(或程序)在使用UDP协议之前,不必先建立连接.自然,发送数据结束时也没有连接需要释放.因此,减少了开销和发送数据之前的延时.UDP也采用端口来区分进程. 在java中,java.

Java并发编程学习笔记(一)线程安全性 1

什么是线程安全性: 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问."共享"意味着变量可以由多个线程同时访问,而"可变"则意味着变量的值在其生命周期内可以发生变化. 一个对象是否需要线程安全的,取决于他是否被多个线程访问.这指的是在程序中访问对象的方式,而不是对象要实现的功能.要使得对象时线程安全的,需要采用同步机制来协同对对象可变状态的访问.如果无法实现协同,那么可能导致数据破坏以及其他不该出现的结果. 如果当多个线程访

FFmpeg编程学习笔记一

FFmpeg编程学习笔记一 1.为了学习ffmpeg编程需要单步调试,参照网上的教程用VS2013编译一次成功,之后随便写了个重采样音轨小程序,也就是把一个5.1声道的AC3文件分解成6个WAV文件的简单功能. 2.编译成功执行也正常,但速度奇慢,比同类软件eac3to慢了约5倍. 3.OK上网搜搜咋回事,一天,二天过去了无果. 4.无奈用VS2013的性能与诊断,分析出最占用时间的函数调用具然是:swr_convert参数里的lrintf() lrint() llrint() llrintf(

Android Socket编程学习笔记

通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定. 在java中,Socke

linux网络编程学习笔记之六 -----I/O多路复用服务端

多进程和多线程的目的是在于最大限度地利用CPU资源,当某个进程不需要占用太多CPU资源,而是需要I/O资源时,可以采用I/O多路复用,基本思路是让内核把进程挂起,直到有I/O事件发生时,再把控制返回给程序.这种事件驱动模型的高效之处在于,省去了进程和线程上下文切换的开销.整个程序运行在单一的进程上下文中,所有的逻辑流共享整个进程的地址空间.缺点是,编码复杂,而且随着每个逻辑流并发粒度的减小,编码复杂度会继续上升. I/O多路复用典型应用场合(摘自UNP6.1) select的模型就是这样一个实现