C#基础一:面向对象基础

  面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台,分布式系统,网络管理结构、CAD技术、人工智能领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。              

                                                                    --百度百科

  起初面向对象是专指在程序设计中采用封装,继承,多态等设计方法。

  在C#学习的基础阶段,我们只需要知道就是指通过对象来调用方法就可以了,过于执着于概念反而念头不通达。想要深入的理解,生活上多思考,开发中多敲代码来体会,很难通过别人的几句话来理解清晰。

  ——以下是我接触过并对我比较有触动的解释和建议:

  1>想要深入了解面向对象,可以读一下《Java编程思想》,虽然例子用的是Java语言,但是面向对象的思想和C#是相通的,再者说,学习C#或多或少都要接触Java。

  2>这个就比较豪放了,面向对象就是个XX(略过,贬义词),你只需要知道代码怎么敲就可以了。我的理解就是,这么多年都没有能统一出一个精准易懂的描述,我们不必一开始就去做那个第一个把它描述出来的人,多用,多做,多体会,如是而已。

  3>这条是刚刚参加工作时,总监做的简单培训,对于开发来说,实用:

    简单介绍面向对象的设计原则(这是我听过最简单粗暴的设计原则讲解):

      1,开闭原则-->对扩展开发,对修改关闭-->写代码时候要注意

      2,里氏替换原则-->适用于基类的一定适用于其子类-->继承

      3,依赖倒转原则-->尽量依赖于抽象不要依赖于具体-->接口

      4,接口隔离-->使用多个专门的接口比使用单一的总接口要好

      5,合成聚合复用原则-->尽量少用继承--防止层次过深,难以控制,不要有三级以上的继承 合成聚合实现继承两个类,这样来完成
多继承。——在多继承或继承层次比较深的情况下适用这个法则

      6,迪米特法则--为什么它是法则而不是原则

      -->一个对象因对其他的对象尽可能的少了解——内部实现的方法不对外部公开,通过参数的形式交给外部调用,但是

实际上,参数一多就难以控制,尽量少用函数的参数(3个以内最佳),谨慎的公开一些属性。类内高内聚,类外低耦合。

  当然这些话不依托于代码都比较枯燥,但是配上特定代码又容易误导,还是在自己开发的时候多带着这些问题思考比较好。

  然后要了解一个事物,除了从它本身来了解,对比也是个不错的切入方式。

  -->这里引用百度知道的一组问答:

  面向对象和面向过程的区别?

      面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

  面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
  例如:

    五子棋,

    面向过程的设计思路就是首先分析问题的步骤:

    1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。

  把上面每个步骤用分别的函数来实现,问题就解决了。
    而面向对象的设计则是从另外的思路来解决问题。

  整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
  可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。
  功能上的统一保证了面向对象设计的可扩展性。

  比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。
  再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了。)而下棋的大致步骤从面向对象的角度来看没有任何变化。
当然,要达到改动只是局部的需要设计的人有足够的经验,使用对象不能保证你的程序就是面向对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所谓面向对象的程序很难有良好的可移植性和可扩展性。

  

时间: 2024-10-11 00:54:18

C#基础一:面向对象基础的相关文章

MYSQL、PHP基础、面向对象基础简单复习总结

一.MYSQL 1.配置MySql 第一步安装服务器(apache). 第二部安装MySql界面程序  2.MySql数据库的数据类型简单介绍常用的几种 整形:int 小数:float.double.decimal 字符串:varchar.char(他俩的区别是创建的长度与具体长度的问题) bool类型:bit 日期时间:datetime 3.创建表及约束 创建表语句: create table InFo( Pwd varchar(50), Name varchar(50), Nation va

python3 速查参考- python基础 8 -> 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)

基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self.name = name def __del__(self): # 函数属性:析构函数 print("goodbey ", self.name) I1 = C1('bob') #-- Python的类没有基于参数的函数重载 class FirstClass: def test(self,

学习PYTHON之路, DAY 7 - PYTHON 基础 7 (面向对象基础)

面向对象三大特性 一.封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容. 所以,在使用面向对象的封装特性时,需要: 将内容封装到某处 从某处调用被封装的内容 第一步:将内容封装到某处 self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1 当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2 所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name

C#面向对象基础(一)

面向对象这个词我很早就知道了,但具体是什么东西?什么是面向对象?一直以来都 不理解,只知道它有三大特征,即封装-继承-多态.直到学习完C#视频和看完设计模式 中面向对象基础后,对C#面向对象才有了一个大致的理解.下面这幅图是我对它的一个 宏观的认识. 一.基本知识 1.类成员 属性 C#不直接访问类的数据,通过get和set访问类中字段 方法 表示类的行为.方法可以构造,也可以重载 2.封装 每个对象都包含它能进行操作所需要的所有信息,这种特性就是封装 3.继承 如果两个对象A和B,可以描述为B

java基础学习05(面向对象基础01--类实例分析)

面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过setter和getter设置和取得4.如果需要可以加入若干构造方法 5.再根据其它要求添加相应的方法6.类中的所有方法都不要直接输出,而是交给被调用处调用 Demo 定义并测试一个名为Student的类,包括属性有"学号"."姓名"以及3门课程"数学".

Java基础和面向对象

Java基础和面向对象 一.数据类型和运算符 标识符 组成:字母.数字.下划线.$ 首字母:不能是数字 见名知义 不能是关键字(48个) 正确的:name.name123.age._name.$name 错误的:1name.public.123.na%me 标识符主要给一个元素起名字,需要符合起名字的以上4种规则.比如说,类的名字:首字母大写:变量名称:小写:方法名称:驼峰命名:数组名称.接口名称.集合名称. //你定义为汉字也可以,不过不推荐,因为国际语言以English为主.为了面向世界,使

Python学习系列(八)( 面向对象基础)

 Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类本身. 2,类的方法:对象也可以使用属于类的函数来具有功能,这样的函数称之为类的方法.域和方法合称为类的属性.类使用class关键字创建,类的属性被列在一个缩进块中. 3,self:类的方法与普通的函数只有一个特别的区别----他们必须有一个额外的第一个参数名称,但是在调用的时候不能为其赋值,Pyt

软件工程——理论、方法与实践 之 面向对象基础

软件工程——理论.方法与实践 之 面向对象基础 面向对象技术是软件工程领域中的重要技术,这种技术比较自然的模拟了人类认识客观世界的方式,是当前计算机软件工程学中的主流方法.面向对象方法认为:客观世界是由对象组成的,任何客观的事物或实体都是对象,复杂的对象可以由简单的对象组成:具有相同数据和相同操作的对象可以归并为一个类,对象是对象类的一个实例:类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特征,子类与父类形成类的层次结构:对象之间通过消息传递相互联系:类具有封装性,其数

附录A培训实习生-面向对象基础(2):构造方法和带参数的构造方法

构造方法,又叫构造函数,其实就是对类进行实例化.构造方法与类同名,无返回值,也不需要void,在new时候调用.也就是说,就是调用构造方法的时候. 所有类都有构造方法,如果你不编码则系统默认生成空的的构造方法,如你有定义构造方法,那么默认的构造方法就会失效. 有参数的构造方法:比如我们希望每个小猫一诞生都有姓名,那么就应该写一个有参数的构造方法. 这是一个有参数的构造方法,可以看下: 1 using System; 2 using System.Collections.Generic; 3 us

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气