• 2、面向对象以及winform的简单运用(面向对象的四大基本特性)


    面向对象的四大基本特性

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

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

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

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

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

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

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

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

     1 private string _Name;//命名规则:下划线+大写字母开头
     2 
     3 public string Name
     4 {
     5       get//取值
     6       { return _Name; }
     7 
     8       set//赋值
     9       { _Name = value; }
    10 }

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

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

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

     1         public int cetizhong(string sex,decimal shengao,decimal tizhong)
     2         {
     3             if (sex == "")
     4             {
     5                 decimal biaozhun = shengao - 100;
     6                 if (tizhong > biaozhun + 3)
     7                 {
     8                     return 1;//
     9                 }
    10                 else if (tizhong < biaozhun - 3)
    11                 {
    12                     return 2;//
    13                 }
    14                 else
    15                 {
    16                     return 0;//标准
    17                 }
    18                 
    19             }
    20             else if (sex == "")
    21             {
    22                 decimal biaozhun1 = shengao - 100;
    23                 if (tizhong > biaozhun1 + 3)
    24                 {
    25                     return 1;//
    26                 }
    27                 else if (tizhong < biaozhun1 - 3)
    28                 {
    29                     return 2;//
    30                 }
    31                 else
    32                 {
    33                     return 0;//标准
    34                 }
    35             }
    36             else
    37                 return 3;
    38             
    39         }

    再在主函数中调用:

     1             Ren r = new Ren();
     2             Console.WriteLine("请输入姓名:");
     3             r.name = Console.ReadLine();
     4             Console.WriteLine("请输入姓别:");
     5             r.sex = Console.ReadLine();
     6             Console.WriteLine("请输入身高:");
     7             r.shengao = decimal.Parse(Console.ReadLine());
     8             Console.WriteLine("请输入体重:");
     9             r.tizhong = decimal.Parse(Console.ReadLine());
    10 
    11             int fanhui = r.cetizhong(r.sex, r.shengao, r.tizhong);
    12             if(fanhui ==0)
    13                 Console.WriteLine("标准");
    14             else if(fanhui == 1)
    15                 Console.WriteLine("偏重");
    16             else 
    17                 Console.WriteLine("偏瘦");

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

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

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

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

  • 相关阅读:
    【Unity Shader 】CG语法
    编译boost到各个系统平台 mac,iOS,linux,android,wind
    c pvr转存pvr.ccz格式 (转 http://www.cnblogs.com/howeho/p/3586379.html)
    mac Nginx + FastCgi + Spawn-fcgi + c++
    得到指定占用宽度的字体 。(英文占用一个位,中文占用两个位,英文大写占用两个位)
    cocos2d 文件系统使用文件内存映射性能对比
    关于PUPBLD.SQL
    ora-01033:ORACLE initialization or shutdown in progress解决方法
    linux下如何查看命令的绝对路径
    【测试工具】http协议调试利器fiddler使用教程
  • 原文地址:https://www.cnblogs.com/wleaves/p/4296884.html
Copyright © 2020-2023  润新知