话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是晏众文武,在酒席间,曹操诗兴大发,不觉吟道:“喝酒唱歌,人生真爽”,众文武其呼:“丞相好诗!”于是一臣子速命印刷工匠刻版印刷,以便流传天下。样本出来给曹操一看,曹操感觉不妥,说道:“喝与唱,此话过俗,应改为‘对酒当歌’较好!”,于是此臣就命工匠重新来过,工匠眼看连夜刻版之工,彻底白费,心中郁闷,只得照办。样本再次出来请曹操过目,曹操细细一品,觉得还是不好,说:“人生真爽太过直接,应改问语才够意境,因此应改为‘对酒当歌,人生几何?’”当臣转告工匠之时,工匠吐血身亡!可惜三国时期活字印刷术还未发明,所以类似事情是有发生,如果有了活字印刷,则只需更改个别字即可,实在妙哉。

所以说,四大发明之活字印刷是面向对象的胜利,世界上的万事万物都是有联系的,活字印刷是如何和我们的面向对象进行完美结合的呢?第一,要改,只需更改要改之字,此为可维护;第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用;第三,此诗若要加字,只需另刻字加入即可,这是可扩展;第四,字的排版其实有可能是竖排也有可能是横排,此时只需将活字移动就可做到满足排列需求,此为灵活性。但是在活字印刷术之前,上面的四种特性都无法满足,要修改,必须重刻,要加字,必须重刻,要重新排列,必须重刻,印完这本书后,此版已无任何可在利用的价值。

由上述故事,想到在敲学生管理系统和机房收费系统的时候,为实现某个功能的时候,我们的直觉是用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程,这个其实是用计算机的方式去思考问题,比如说机房收费系统中,上机这个小功能,逻辑思维如下所示:

根据我们的逻辑思维进行相应判断,得到我们想要实现的上机这个小功能,这个过程本身没有错,但是这样的思维却使得我们的程序只为满足当前的需求,缺少灵魂,这样的软件做出来是不规范的,不易维护的,不易扩展的,以及不易复用的。那么面向对象到底是什么?有着怎样神奇的面孔,接下来,我们翻开崭新的一页:

面向对象的知识,前面的博文中有相关介绍,再此不在一一赘述,总的来说面向对象的主要优点以及与面向过程有着那些不一样的地方,如下:

面向对象程序设计中有两个重要概念,Class和Object,以及OMT和面向对象的三个基本特征,具体介绍如下:

对面向对象有了一些基本的掌握,以及类和对象的把控,我们来深入了解C#中的类,类是一种自定义的数据类型,就像整型和字符型,可以使用类来声明变量,用类声明的变量称之为引用变量,所以,类是引用型数据类型,C#提供了创建了类和对象的功能,用C#编程时,要做的主要工作就是定义组成程序各种类,类定义可以作为一个模板或蓝图,封装了她的对象的数据和行为,一旦类定义好了,就可以以她作为模板来创建类的对象和实例,那么,接下来,我们以C#视频中的一个例子-修改密码来看一下,类的创建和实例,首先,我们需要做的是声明一个能判断密码是否正确,并且能够更改密码的类,并在类中定义相关方法:

 class Authentic   //声明一个判定密码是否正确,并能够更改密码的类
       {  

        private string PassWord = "dengyigegushi";                  //在类中定义密码  

        public bool IsPasswordCorrect(string userPassword)      //在类中声明判断密码是否正确的方法
        {
            return (PassWord == userPassword) ? true : false;
        }
        public bool ChangePassWord(string oldPassWord, string newPassWord)//在类中声明更改密码的方法
        {
            if (oldPassWord == PassWord)
            {
                PassWord = newPassWord;
                return true;
            }
            else
                return false;
           }

将类实例化

 class Program
    {
        static void Main(string[] args)
        {
            Authentic simon = new Authentic(); //simon是authentic实例化得到的名字
              bool done;
            done = simon.ChangePassWord("dengyigegushi", "dangxingfulaiqiaomen");
            if (done == true)
                Console.WriteLine("密码已更改");
            else
                Console.WriteLine("密码更改失败!");
        }
   }

我们再来举个小例子,具体详细讲述类的创建:

[<访问说明符>] [<修饰符>] class <classname>

{

//body of class

}

其中class是C#创建类所使用的关键字;<classname>是类的名称;<body of class>是类的成员,主要包括属性和方法!C#之旅,未完待续......

C#之面向对象的更多相关文章

  1. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  2. 一起学 Java(二)面向对象

    一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...

  3. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  4. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  5. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  6. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  7. Java程序员应该了解的10个面向对象设计原则

    面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...

  8. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  9. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  10. .NET基础拾遗(2)面向对象的实现和异常的处理基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

随机推荐

  1. 衣带渐宽终不悔,为伊消得人憔悴--DbHelper增强版

    核心理念 如何使用 测试实例 数据库内详细数据信息 测试代码 数据库连接池测试 测试集 延伸 相关下载链接 前几日,写了一篇关于一个 轻量级数据持久化的框架的博客(点击浏览: http://blog. ...

  2. ZooKeeper之(三)工作原理

    3.1 系统架构 ZooKeeper集群是由多台机器组成的,每台机器都充当了特定的角色,各种角色在协作过程中履行自己的任务,从而对外提供稳定.可靠的服务. 由上图可知,ZooKeeper集群由多台机器 ...

  3. 【SSH系列】Hibernate映射 -- 多对多关联映射

         映射原理 在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论 ...

  4. 在Windows cmd中计算行数

    本文主体来自这篇外文文章的翻译.原文中有一个副标题:"如何简单地用Windows自带的FIND在CMD.exe中计算行数" 当我们在命令行环境中工作时,能计算其它工具输出内容的行数 ...

  5. Linux中的高级文本处理命令,cut命令,sed命令,awk命令

    1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields    ## 用于有特定分隔字符 [r ...

  6. 数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0<x<100,元素个数也是大于0, 小于100 。

    比如a[]={2,4,5,6,7},得出的两组数{2,4,6}和{5,7},abs(sum(a1)-sum(a2))=0: 比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1 ...

  7. Java异常处理-----抛出处理

    抛出处理 定义一个功能,进行除法运算例如(div(int x,int y))如果除数为0,进行处理. 功能内部不想处理,或者处理不了.就抛出使用throw new Exception("除数 ...

  8. Android Stutio中使用java8的Lambda表达式

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51532028 本文出自:[openXu的博客] 目录: 为什么要使用Lambda表达式 让A ...

  9. iOS9中关于地址簿ABAddressBookXXX之类方法被废弃的解决

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在iOS9的SDK中我们会发现原来地址簿权限查询,获取以及创建 ...

  10. javascript之正则表达式

    创建正则表达式的两种方法 显式: new RegExp("pattern"[,"flags"]); 例 var regex = new ("abc&q ...