c# 中的OOP思想怎么最快的理解和掌握
答案:5 悬赏:80 手机版
解决时间 2021-02-06 20:28
- 提问者网友:斑駁影
- 2021-02-06 05:26
希望说的详细和准确
最佳答案
- 五星知识达人网友:春色三分
- 2021-02-06 06:20
OOP的许多原始思想都来之于Simula语言,并在Smalltalk语言的完善和标准化过程中得到更多的扩展和对以前的思想的重新注解。可以说OO思想和OOPL几乎是同步发展相互促进的。与函数式程序设计(functional-programming)和逻辑式程序设计(logic-programming)所代表的接近于机器的实际计算模型所不同的是,OOP几乎没有引入精确的数学描叙,而是倾向于建立一个对象模型,它能够近似的反映应用领域内的实体之间的关系,其本质是更接近于一种人类认知事物所采用的哲学观的计算模型。由此,导致了一个自然的话题,那就是OOP到底是什么?[D&T 1988][B.S 1991] .。在OOP中,对象作为计算主体,拥有自己的名称,状态以及接受外界消息的接口。在对象模型中,产生新对象,旧对象销毁,发送消息,响应消息就构成OOP计算模型的根本。 对象的产生有两种基本方式。一种是以原型(prototype)对象为基础产生新的对象。一种是以类(class)为基础产生新对象。原型的概念已经在认知心理学中被用来解释概念学习的递增特性,原型模型本身就是企图通过提供一个有代表性的对象为基础来产生各种新的对象,并由此继续产生更符合实际应用的对象。而原型-委托也是OOP中的对象抽象,代码共享机制中的一种。一个类提供了一个或者多个对象的通用性描叙。从形式化的观点看,类与类型有关,因此一个类相当于是从该类中产生的实例的集合。而这样的观点也会带来一些矛盾,比较典型的就是在继承体系下,子集(子类)对象和父集(父类)对象之间的行为相融性可能很难达到,这也就是OOP中常被引用的---子类型(subtype)不等于子类(subclass)[Budd 2002]。而在一种所有皆对象的世界观背景下,在类模型基础上还诞生出了一种拥有元类(metaclass)的新对象模型。即类本身也是一种其他类的对象。以上三种根本不同的观点各自定义了三种基于类(class-based),基于原型(prototype-based)和基于元类(metaclass-based)的对象模型。而这三种对象模型也就导致了许多不同的程序设计语言(如果我们暂时把静态与动态的差别放在一边)。是的,我们经常接触的C++,Java都是使用基于类的对象模型,但除此之外还有很多我们所没有接触的OOPL采用了完全不一样的对象模型,他们是在用另外一种观点诠释OOP的内涵。 什么是oop的基本思想呢?把组件的实现和接口分开,并且让组件具有多态性。不过,两者还是有根本的不同。oop强调在程序构造中语言要素的语法。你必须得继承,使用类,使用对象,对象传递消息。gp不关心你继承或是不继承,它的开端是分析产品的分类,有些什么种类,他们的行为如何。就是说,两件东西相等意味着什么?怎样正确地定义相等操作?不单单是相等操作那么简单,你往深处分析就会发现“相等”这个一般观念意味着两个对象部分,或者至少基本部分是相等的,据此我们就可以有一个通用的相等操作。再说对象的种类。假设存在一个顺序序列和一组对于顺序序列的操作。那么这些操作的语义是什么?从复杂度权衡的角度看,我们应该向用户提供什么样的顺序序列?该种序列上存在那些操作?那种排序是我们需要的?只有对这些组件的概念型分类搞清楚了,我们才能提到实现的问题:使用模板、继承还是宏?使用什么语言和技术?gp的基本观点是把抽象的软件组件和它们的行为用标准的分类学分类,出发点就是要建造真实的、高效的和不取决于语言的算法和数据结构。当然最终的载体还是语言,没有语言没法编程。stl使用c++,你也可以用ada来实现,用其他的语言来实现也行,结果会有所不同,但基本的东西是一样的。到处都要用到二分查找和排序,而这就是人们正在做的。对于容器的语义,不同的语言会带来轻微的不同。但是基本的区别很清楚是gp所依存的语义,以及语义分解。例如,我们决定需要一个组件swap,然后指出这个组件在不同的语言中如果工作。显然重点是语义以及语义分类。而oop所强调的(我认为是过分强调的)是清楚的定义类之间的层次关系。oop告诉了你如何建立层次关系,却没有告诉你这些关系的实质。
全部回答
- 1楼网友:杯酒困英雄
- 2021-02-06 08:15
面向对象
- 2楼网友:归鹤鸣
- 2021-02-06 07:30
一切都是对象 抽象的
- 3楼网友:山河有幸埋战骨
- 2021-02-06 07:13
没有快速的说法每个人都有自己的理解、oop中最重要的就是多态、把多态弄懂其它的封装继承都没问题啦、因为这个两个都是为多态做准备的、等你用到设计模式的时候就知道全部是多态……之前我刚刚接触的时候有点朦胧、简单的从代码上理解就是要用这个类就要实例化出来、如果类是抽象类就不能实例、可以去继承、通过父类去实例它的子类、这就是多态的一种、封装没什么挺容易理解就是一个类中有很多私有属性、外面的类是访问不到的、要是想访问必须封装起来提供出一个公共的、不过这个过程要用到get和set无论是java语言还是c#或者其它都是一样的、可能就是关键字不一样……可以上网找找资料、希望帮得到你……
- 4楼网友:迷人又混蛋
- 2021-02-06 06:48
面向对象什么是面向对象?面向对象就是把现实中的事物抽象化,就是靠想,但是不是想到什么写什么,要有规律。比如说你要建一个电脑教室,首先要有个教室,在这个教室里面要有电脑,有桌子和椅子等等。这些就是我们说的对象,是能够看到的实体。教室里面的每一个东西都是一个实体对象,他们共同构建了一个电脑教室。向对象的三大特性:封装,继承,多态。?? 那么什么是封装?就是我们在建一个电脑教室的时候我们要把桌子,椅子,电脑都塞进这个教室里面,把他们都联系在一起组成一个整体。这个过程就是封装的过程。例子:public class 教室 //把黑板,投影仪放进教室{string桌子; string椅子;string电脑;} ?? 那么什么是继承?就是在我们建这个电脑教室之前,我们已经继承了已有的一间教室里面的所有东西。这件教室里面的投影仪,黑板等等,都已经被电脑教室所继承下来了。例子:public class 教室 {string 投影仪;string黑板; } public class 电脑教室 :教室 //电脑教室类继承了教室类中的所有东西{string电脑;} ?? 那什么是多态?就是说我们有个电脑教室,这个电脑教室可以当成一个多媒体教室,我们可以在里面看电影,也可以作为一间教室,我们可以在里面上课。也就是说我们通过不同的行为标准,获得不同的结果。例子:public class 教室 {public virtual void 作用(){}} public class 电脑教室:教室 {Public overide void 作用(){ 上电脑课;}} public class 多媒体教室:教室 {Public overide void 作用(){ 看电影;}} 面向对象的特征就是:面向对象就是把现实中的事物抽象话。?? 抽象就是忽略主体中与当前目标无关一些方面,去注意与当前目标相关的方面。比如说我们建一个电脑教室,我们注意的是里面的电脑是否齐全。而不会去关注这个教室里面有没有空调,空调是次要的,有没有它电脑教室都可以去上电脑课。而没有了电脑,桌子之类的主题元素后,这个教室就不会叫做电脑教室。面向对象的特点:模块化,低耦合,信息隐藏。?? 模块化:面向对象开发方法很自然地支持了把系统分解成模块的设计原则:对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。如在一个学校中它有很多教室,每一个教室都是一个模块。?? 信息隐藏:面向对象方法中,信息隐藏通过对象的封装来实现。如你在电脑教室外面是不能够知道这件房间是用来干什么的,只有你有这个房间的钥匙,进去了才能知道这是一件电脑教室。它是被教室包裹在外面的。?? 低耦合:在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。低耦合是设计的一个重要标准,因为这有助于使得系统中某一部分的变化对其它部分的影响降到最低程度。如在一个学校中没间教室之间有各自的功能作用,有的是实验事,有的是图书室,有的是办公室。他们之间的联系很小,一个模块的改变并不能改变其他的教室功能。
自己的理解,仅攻参考,高手勿喷。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯