A.3C# 面向对象编程

ylbtech- .NET-Basic: A.3-C# 面向对象编程

 A.3-C# 面向对象编程

1.A,笔记(Notes)返回顶部

C#__面向对象编程;

面向对象:面向对象编程的三大特性(封装,继承,多态)
1、类和对象;
               ---实例化--->
类 <----------------------> 对象
               <---抽象---

一、类的构建,类的成员,类的封装,方法的重载:
1、类的成员:
成员变量
成员函数
属性(新的东东)

2、成员的访问控制:
(私有成员)private(默认的访问控制) 类内部
(保护成员)protected 类内部,子类
(内部成员)internal 类内部,子类,包(相同命名空间)
(公有成员)public

3、构造函数及构造函数的重载

4、方法的重载
在一个类的内部
方法名相同
参数不同(类型,顺序,数量)

5、属性:
1)属性是类中定义的,和成员变量对应的变量
2)属性主要解决了私有成员变量的访问控制(读写属性,只读属性,只写属性)
3)属性定义格式 :
public 类型 属性名
{
get{return 成员变量}
set{成员变量 = value}
}
4)属性中的get,和set不需要,显式的调用,而根据用户的操作来自动选择一个执行;
/************************
案例:
1、定义简单的人类,三个成员变量,没有方法;
2、定义简单的人类,三个参数,实现2个构造函数和一个show
3、定义简单的数学类,实现2个数相加各类型重载函数;
4、定义一个简单的用户类(用户名密码)用java式的方法封装,然后测试;
4_1、对上一题,用类的属性的方式,实现对成员变量的封装;

任务:
1、定义一个书籍类Book,成员变量(编号,名称,价格),成员方法(全参构造,空参构造,show)
然后在,Program类中测试;

2、定义一个计算类,实现一个整数加法的静态方法(分别实现求2个整数,3个整数,4个整数,整形数组求和的重载方法)
然后在,Program类中测试;

3、定义一个银行用户类,成员变量(帐号,密码,年龄,住址,余额),成员函数(空/全参构造,getts,setts方法,show)
然后在,Program类中测试;

4、定义一个银行用户类,成员变量(帐号,密码,年龄,住址,余额),成员函数(空/全参构造,show),属性(所有的成员变量的读写属性)
然后在,Program类中测试;
***********************/

二、namespace,using

1.B,返回顶部
 
1.C,扩展读物(Extending Reading)返回顶部
1,面向对象思想-张晗
面向对象思想
面向对象思想为软件设计与开发赋予了哲学的意义。在哲学的世界里,小至沙粒微尘,大至日月星辰乃至宇宙,均可视为单独的个体对象而存在。如果以哲学的目光凝视程序的世界,又何尝不是如此?一个用户,一种销售策略,一条消息,或是某种算法,一个Web的网页,面向对象思想均将其看作为一种对象。而每一种对象,都有其单独的生命周期,谁来创建它,谁来销毁它,它的内在属性,表现行为,以及它与外界之间的关系和集合,无不具有某种哲学的意味。我们在定义对象时,就好比是在描述一个活生生的事物,需要定义该对象的自然属性和社会属性,限定它的内涵与外延,勾勒出该对象的社会关系。而对于抽象、多态与封装,则是一种形而上学的概念,它将面向对象技术推向为思想的境界。

因此,我们在运用面向对象思想来定义对象时,就必须从思想的高度上俯瞰它,同时又必须结合现实来描述它。两者之间并没有绝对的矛盾。

所谓思想的高度,就要求我们必须理解所谓面向对象思想的精髓,并通过运用诸如设计模式、对象法则等知识,并从软件架构的角度出发,高屋建瓴地勾勒出整个软件结构的全貌。说得玄一些,就颇有几分“超然物外”的感觉。

所谓结合现实,也即是说对象离不开其依存的环境,毕竟软件设计不可能达到完全抽象的境界。从软件工程的角度来看,就是在设计时,需结合客户的需求、具体的业务来综合考虑。怎么界定对象的边界?对象的属性和行为是什么?哪些需要封装,而哪一些又需要暴露接口?有时候,业务才能决定设计的一切,如果纯为设计而设计,只能是空中楼阁,并不能搭建出扎实的建筑来
 
2, 面向对象思想的目的是框架化,手段是抽象
一、 面向对象思想的目的是框架化,手段是抽象

所以我觉得面向对象的编程思想就是:一个大型工程是分层次结构的,每层又由抽象的结构连接为整体(框架化),各个抽象结构之间是彼此独立的,可以独立进化(继承,多态)。层次之间,结构之间各有统一的通讯方式(通常是消息,事件机制)。

二、 以前C语言编程中常用的“面向对象”方法

接口限制:层与层之间仅仅知道有限的函数

名字解析:层与层之间建立共同的名字与函数的对应关系,之间利用名字调用功能。
3,面向对象的相关概念

1、面向对象思想的相关概念

C++语言 2010-01-18 20:00:43 阅读163 评论0  字号: 订阅
一、综述
       在计算机科学中,对象(Object)通常是问题域或实现域中某些事物的一个抽象,它反映此事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。对象是一个黑盒子,他是用来接收和发送消息;一个对象实体中,通常包括有数据和程序两部分。使用该对象的用户也不需要知道对象中具体的数据和程序情况,只需要了解该对象的接口,及接收什么样的消息和会反馈什么就可以了。

那么,到底什么是面面对象呢?从本质上说,面向对象既是一种思想,也是一种技术,它是过程式程序设计方法的一个高级层次。面向对象思想利用对问题的高度抽象来提升代码的可重用性,从而提高生产力。尤其是在较为复杂的规模较大的系统实现中,面向对象通常比传统的过程式方法产生更高的效能。而且,随着软件规模的增大,面向对象相对于传统的过程式的优势就更加凸现。可以说,是软件产业化最终促进了面向对象技术的产生和发展。
面向对象有三大基本机制:封装、继承、多态,称一个编程或程序构建是面向对象的,首先他要具有这几个特点。在面向对象的编程和设计中,以类和对象来刻画客观世界。面向对象技术就是针对现实思维方式而产生的,继承和抽象,归纳和演绎是面向对象技术中常用的方法学和思维模式。面向对象技术是一种按照人们对现实世界习惯的认识论和思维方式来研究和模拟客观世界的方法学。
“Why all this concern for being able to change software? Because experience has taught 
us that software changes. A popular adage is that "software is not written, 
it is re-written".”
二、面向对象的相关概念
1、对象:是人们要进行研究的事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
2、类:具有相同或相似性质的对象的抽象就是类。类中操作的实现过程叫做方法。对象之间进行通信的结构叫做消息。
3、抽象:抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。要抽象,就必须进行比较。抽象化主要是为了使复杂度降低,以得到论域中较简单的概念,好让人们能够控制其过程或以综观的角度来了解许多特定的事态。
4、思维:思维是人脑对客观事物的本质属性和事物之间内在联系的规律性所作出的概括与间接的反映。抽象思维凭借科学的抽象概念对事物的本质和客观世界发展的深远过程进行反映,使人们通过认识活动获得远远超出靠感觉器官直接感知的知识。科学的抽象是在概念中反映自然界或社会物质过程的内在本质的思想,它是在对事物的本质属性进行分析、综合、比较的基础上,抽取出事物的本质属性,撇开其非本质属性,使认识从感性的具体进入抽象的规定,形成概念。科学的、合乎逻辑的抽象思维是在社会实践的基础上形成的。思维是建立在人们对现存事物的充分认识基础之上,经过大脑对这些现存事物的感性认识、理解、分析、总结等逻辑思考过程,从而对其本质属性做出内在的、联系的、间接的、概括的反映;而设计则是通过一定的手段创造性地改变这些事物的性质,形成可以具备价值的物品的活动。
5、多态性:多态性就是多种表现形式,即同样的消息被不同的对象所接受将会产生不同的结果。当然,也有"一个对外接口,多个内在实现方法"的情况。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。
6、封装:封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,即将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。
7、继承:继承是指一个对象直接使用另一对象的属性和方法。其本质是从现在的类生成新类。继承关系是静态关系。包括静态继承和动态继承;静态继承是在父类的基础上通过增加数据成员和方法成员而构成子类的过程,而动态继承是以父类的实例作为子类的数据成员而存在的一种方法。动态继承是传统意义上的组合,或称为聚合,类似于C语言中的结构体成员是结构变量。静态继承中的父类和子类之间是一种泛化-特化的关系,动态继承中的父类和子类之间是一种整体-部分的关系。
8、重载:在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同。重载只是一种语言特性,与多态无关,与面向对象也无关。
9、覆盖:覆盖是指子类重新定义父类的虚函数。
10、归纳:从许多个别的事物中概括出一般性概念,原则,或结论的思维方法。
11、演绎:从普遍性结论或一般性事理推导出个别性结论的论证方法。
12、泛化:当某一反应与某种刺激形成条件联系后,这一反应也会与其它类似的刺激形成某种程度的条件联系,这一过程称为泛化,即模板化。
13、特化:将模板对应于某一特定类型进行特别的声明或定义。
14、聚合:是关联的一种形式,代表两个类之间的整体和局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。
15、接口:在C++中,一个类被允许继承多个类。但是在Java以后的语言不被允许。这样,如果想继承多个类时便非常困难。所以开发方想出了新办法:接口。一个接口内,允许包含变量、常量等一个类所包含的基本内容。但是,接口中的函数不允许设定代码,也就意味着不能把程序入口放到接口里。由上可以理解到,接口是专门被继承的。接口存在的意义也是被继承。和C++里的抽象类里的纯虚函数类似,不能被实例化。
16、复用:复用就是指“利用现成的东西”。把复用的思想用于软件开发,称为软件复用。
17、构件:是一个物理的、可替换的系统组成部分,它包装了实现体且提供了对一组接口的实现方法。是面向软件体系结构的可复用软件模块。未来软件开发的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程。其优点是构件组装模型导致了软件的复用,提高了软件开发的效率。
18、面向对象设计的准则:模块化、抽象、信息隐藏、低耦合、高内聚。面向对象的三特点:封装、继承、多态。面向对象的三大要素:抽象、封装性(信息隐藏)、共享性。
19、方法:指人们为了达到某种目的而采取的手段、途径和行为方式中所包含的可操作的规则或模式。

 
warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/ylbtech/p/2980259.html