面向对象的四大基本特性

面向对象的核心概念就是封装、抽象、继承、多态这四大基本特性,在这里先解释一下它们的定义:

封装:是一种隐藏信息的特性。找到变化并且把它封装起来,你就可以在不影响其它部分的情况下修改或扩展被封装的变化部分,这是所有设计模式的基础,就是封装变化,因此封装的作用,就解决了程序的可扩展性。

抽象:在使用面向对象的方法设计一个软件系统时,首先就要区分出现实世界中的事物所述的类型,分析它们拥有哪些性质与功能,再将它们抽象为在计算机虚拟世界中才有意义的实体——类,在程序运行时,由类创建出对象,用对象之间的相互合作关系来模拟真实世界中事物的相互关联。

继承:子类继承父类,可以继承父类的方法及属性,实现了多态以及代码的重用,因此也解决了系统的重用性和扩展性,但是继承破坏了封装,因为他是对子类开放的,修改父类会导致所有子类的改变,因此继承一定程度上又破坏了系统的可扩展性,所以继承需要慎用,只有明确的IS-A关系才能使用,同时继承在在程序开发过程中重构得到的,而不是程序设计之初就使用继承,很多面向对象开发者滥用继承,结果造成后期的代码解决不了需求的变化了。因此优先使用组合,而不是继承,是面向对象开发中一个重要的经验。

多态:接口的多种不同的实现方式即为多态。接口是对行为的抽象,刚才在封装提到,找到变化部分并封装起来,但是封装起来后,怎么适应接下来的变化?这正是接口的作用,接口的主要目的是为不相关的类提供通用的处理服务,我们可以想象一下。比如鸟会飞,但是超人也会飞,通过飞这个接口,我们可以让鸟和超人,都实现这个接口,这就实现了系统的可维护性,可扩展性。

只说这些概念性的东西,可能会很难理解,所以给大家再用实例解释一下它们各自的含义:

1、封装可以包起外界不必需要知道的东西,只向外界展露可供展示的东西。封装的类=数据+算法

如:定义一个Name对象的方法——(先写上private string _Name,右键,重构,封装)封装具有属性,可以用来操作,字段不具有属性,无法get set

 private string _Name;//命名规则:下划线+大写字母开头

 public string Name
{
get//取值
{ return _Name; } set//赋值
{ _Name = value; }
}

在get,set中可以写上很多种算法,最终让它的返回值返回给Name类,从而实现隐藏信息的效果。

2、抽象即写好一个类,用来在编程中调用。

如:根据年龄、性别来判断是否超重的函数(类)

         public int cetizhong(string sex,decimal shengao,decimal tizhong)
{
if (sex == "男")
{
decimal biaozhun = shengao - ;
if (tizhong > biaozhun + )
{
return ;//重
}
else if (tizhong < biaozhun - )
{
return ;//瘦
}
else
{
return ;//标准
} }
else if (sex == "女")
{
decimal biaozhun1 = shengao - ;
if (tizhong > biaozhun1 + )
{
return ;//重
}
else if (tizhong < biaozhun1 - )
{
return ;//瘦
}
else
{
return ;//标准
}
}
else
return ; }

再在主函数中调用:

             Ren r = new Ren();
Console.WriteLine("请输入姓名:");
r.name = Console.ReadLine();
Console.WriteLine("请输入姓别:");
r.sex = Console.ReadLine();
Console.WriteLine("请输入身高:");
r.shengao = decimal.Parse(Console.ReadLine());
Console.WriteLine("请输入体重:");
r.tizhong = decimal.Parse(Console.ReadLine()); int fanhui = r.cetizhong(r.sex, r.shengao, r.tizhong);
if(fanhui ==)
Console.WriteLine("标准");
else if(fanhui == )
Console.WriteLine("偏重");
else
Console.WriteLine("偏瘦");

new的过程也就是由类创建出新对象的过程,也就是函数的一个扩展。

继承——相当于父子关系,食品可以分为水果、蔬菜等等,而水果又可以分为苹果、西瓜等等,它们都继承了上一级的特点。

多态——水果有很多种,分为苹果、西瓜等,这便是它的多种形态。

这些特性还有很多扩展的概念,将会在下面的几章提到。

2、面向对象以及winform的简单运用(面向对象的四大基本特性)的更多相关文章

  1. 1、面向对象以及winform的简单运用(开篇)

    面向对象概述: 要学习好面向对象,我们应该从三个问题入手: 1.什么是面向对象? 2.为什么要面向对象? 3.该怎么面向对象? 面向对象,首先要有一个对象,那么对象是什么呢? 对象的定义是人们要进行研 ...

  2. 面向对象编程其实很简单——Python 面向对象(初级篇)

    出处:http://www.cnblogs.com/wupeiqi/ 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函 ...

  3. 3、面向对象以及winform的简单运用(类的初步认识)

    什么是类? “类”是面向对象编程的基本单元,一个类一般包含两种成员:字段和方法——即变量和函数. 例: //字段或变量的定义 public int age; //方法或函数的定义 public int ...

  4. 8、面向对象以及winform的简单运用(事件与winform入门)

    事件 Visual studio中对可视化窗体控件的事件处理机理: 所有的.NET Framework可视化窗体控件的预定义事件,都会某一对应的“事件名+Handler”委托类型的变量.与此事件相关的 ...

  5. 10、面向对象以及winform的简单运用(isMdicontainer的设置、timer控件进行倒计时的制作)

    IsMdicontainer的设置 这是对于整个窗体的设置,将一个窗体的IsMdicontainer设置为true之后,再打开新窗体便可以让新窗体被父容器包括在内. 操作方法: 1)先建立一个子窗体C ...

  6. 9、面向对象以及winform的简单运用(输入输出流、图像的上传和读取)

    一.输入输出流 1.概念: 输入输出流主要用于保存.读取文件,其内容保存在内存中. 2.使用方法: using System.IO; //System.IO 命名空间包含允许读写文件和数据流的类型以及 ...

  7. 7、面向对象以及winform的简单运用(委托)

    委托 1.概念: 委托可以看成是一个函数的“容器”,将某一具体的函数“装入”后,就可以把它当成函数一样使用.委托变量可看成是一种类型安全的函数指针,它只能接收符合其要求的函数地址. 2.定义方法:de ...

  8. 6、面向对象以及winform的简单运用(抽象基类与接口)

    抽象类与抽象方法 1.书写规范: 在类前面加上abstract关键字,就成为了抽象类:在一个方法前面加上abstract关键字,就成为了抽象方法(抽象方法不能有实现方法,直接在后面加分号) 例: ab ...

  9. 5、面向对象以及winform的简单运用(方法重载、隐藏、重写与虚方法)

    方法的重载: 规定一个方法可以具有不同的实现,但方法的名称是相同的.如: //同样是Man这个方法 public int Man(int age,int name) { …… } //重载 publi ...

随机推荐

  1. springMVC+jsp+ajax上传文件

    工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method ...

  2. EasyUI DataGrid单选如何取消选中

    EasyUI DataGrid在多选时,选中某行,可以取消:而在单选时,并不能取消选中某一行. 可以通过修改源码来完成. 在其源码中找到 opts.singleSelect==true 将代码做如下修 ...

  3. uva 12655 Trucks [LCA](树链剖分+MST)

    The Subtle Balloons Company (SBC) is the main balloon provider for programming contests; it hashuge ...

  4. hdu Flow Problem (最大流 裸题)

    最大流裸题,贴下模版 view code#include <iostream> #include <cstdio> #include <cstring> #incl ...

  5. top命令使用详解

    1.top命令查看服务器负载情况,CPU使用率,进程数等信息. 0.0% wa IO等待占用CPU的百分比 86.9% id  表示空闲的CPU占比 load average数据是每隔5秒钟检查一次活 ...

  6. Webpack+React+ES6入门指南[转]

    React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了Reac ...

  7. 【Ext.Net学习笔记】06:Ext.Net GridPanel的用法(GridPanel 折叠/展开行、GridPanel Selection、 可编辑的GridPanel)

    GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候. 下面来看看效果: 使用行折叠/展开功能之 ...

  8. hdu-5904 LCIS(水题)

    题目链接: LCIS Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  9. linux下查找某个目录下包含某个字符串的文件

    有时候要找一些字符串,但是又不知道在哪个文件,只记得一些字符串 那么如何在linux下寻找包含某段文字的文件呢? 强大的find命令可以帮你完成不可能的任务. 比如我只记得我的程序里包含唯一的字符串“ ...

  10. Linux命令学习-mpstat

    mpstat 用于获取多个 CPU 相关统计信息的有用的命令是 mpstat.下面是一个示例输出: # mpstat -P ALL 5 2 Linux 2.6.9-67.ELsmp (oraclera ...