zoukankan      html  css  js  c++  java
  • C#面向对象的核心概念

    一、面向对象的核心概念

    (一)抽象——面向对象的根基

    讲到抽象,不得不涉及到现代科学技术的基础——数学。

    数学是一门抽象的科学,面对着纷繁复杂的世间万物,数学不理会各种事物的独特特性,而只抽取它们在数量上的特性,深刻揭示了“世间万物”在数量上表现出的共同规律,抽象正是数学的本质特征。

    数学的一个分支——离散数学是计算机科学的根基之一,因此,计算机科学从诞生之日起,就与数学有着密不可分的联系,抽象思维也是计算机科学的主要思维方法之一。

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

    在从真实世界到计算机虚拟世界的转换过程中,抽象起了关键的作用。

    (二)面向对象的三大基本特性

    1.封装

    封装的类=数据+对此数据所进行的操作(即算法)

    通俗的说,封装就是:包起外界不必需要知道的东西,只向外界展露可供展示的东西。

    2.继承

    真实世界中,事物之间有着一种派生关系,比如“食品”这一大类中包括“水果”这一子类,而“苹果”又包含在“水果”这一子类中。

    在计算机世界中,以面向对象的观点不仅将上述事物抽象为类,而且将事物之间的派生关系也一并模拟出来,这种关系称为“继承”。

    在面向对象软件系统中,继承除了模拟现实世界中事物关系这一作用,还是一个“重用已有代码而又不破坏已有代码”的方法。

    3.多态

    在代码中本应使用某一具体子类的地方使用较为抽象的基类对象,这种方法所带来的好处是多态的代码具有“变色龙”的特性,即在不同的条件下,同样代码可以完成不同的功能。

    二、类与对象

    (一)类是面向对象编程的基本单元。

    (二)字段即变量,方法即函数。

    函数分为变量函数(字段的保护),行为函数。

    实例方法:对象可以调用,类不能调用。

    方法的重载:1.同名2.参数类型不同或个数不同

    (三)传值与传址

    传值引用:整形变量,浮点型变量,结构体,日期时间(存储在栈空间)

    传址引用:字符串,数组,类。(存储在堆空间)

    f

    例题:小狗——类的传址引用

    class dog
        {
            public string name;
            public void bark()
            {
                Console.WriteLine("汪汪,我的名字叫"+name);
            }
        }
    
     static void Main(string[] args)
            {
                dog a = new dog();
                dog b = new dog();
    
                a.name = "旺财";
                b.name = "守家";
                a.bark();
                b.bark();
    
                //将a的引用地址复制给c,a和c将同时控制同一个对象;
                //c将对象属性改变后,a指向的也是一个改变后的对象。
                dog c = a;           
                c.name = "大黄";
                a.bark();
    
                //将b的引用地址复制给a和c,a、b、c、控制同一个对象;
                //a、b原来指向的对象没有地址指向它,无法被调用,称为垃圾。
                a = b;
                c = b;              
                a.bark();
                b.bark();
                c.bark();

    a

    例题:用oop解决泳池问题

    //创建圆的类
     class circle
        {
            public double r;
            public double getLength()
            {
                double l = 2 * 3.14 * r;
                return l;
            }
            public double getArea()
            {
                double s = 3.14 * r * r;
                return s;
            }
        }
    
     //求游泳池的周长和广场面积
            static void Main(string[] args)
            {
                circle small = new circle();
                circle big = new circle();
                Console.Write("请输入小圆半径");
                small.r=Convert.ToInt32(Console.ReadLine());
                Console.Write("请输入大圆半径");
                big.r = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("泳池周长:"+small.getLength());
                Console.WriteLine("广场面积:"+(big.getArea()-small.getArea()));
    
            }

    b

    例题:狗咬狗——方法的重载

    class dog
        {
            public string name;
            public int HP = 100;
            public void bark()
            {
                Console.WriteLine("汪汪,我的名字叫" + name);
            }
            public void bite(dog op)
            {
                Console.WriteLine(name + "开始攻击" + op.name);
                op.HP -= 10;
                Console.WriteLine(name + "的血量:" + HP + "
    " + op.name + "的血量:" + op.HP);
    
            }
    
        }
    
     class people
        {
            public string name;
            public void attackDog(dog op)
            {
                op.HP -= 10;
                Console.WriteLine(name+"开始打狗
    "+op.name+"的血量:"+op.HP);
            }
            public void attackDog(dog op, int blood)
            {
                op.HP -= blood;
                Console.WriteLine(name+"开始打狗
    "+op.name+"的血量:"+op.HP);
            }
        }
    
      static void Main(string[] args)
            {
                //狗咬狗
                dog a = new dog();
                dog b = new dog();
                a.name = "旺财";
                b.name = "守家";
                a.bite(b);
                b.bite(a);
                //人打狗,函数的重载
                people h = new people();
                h.name = "秋香";
                h.attackDog(a);
                h.attackDog(a,15);
            }

    c

    例题:opp的字段保护——学生信息

    class student
        {
            /*通过设置private,在本类之外无法直接操作该类的字段,
            必须通过调用该类的函数(称为变量函数)来访问,起到保护字段的作用*/
            public string name;
            private int height;
            private int weight;
            public void setHeight(int a)
            {
                if (a > 0 && a < 1000)
                {
                    height = a;
                }
                else
                {
                    Console.WriteLine("身高输入不正确");
                }
            }
    
            public int getHeight()
            {
                return height;
            }
    
            public void setWeight(int a)
            {
                if (a > 0 && a <= 1000)
                {
                    weight = a;
                }
                else
                {
                    Console.WriteLine("体重输入不正确");
                }
            }
    
            public int getWeight()
            {
                return weight;
            }
    
            public void speak()
            {
                Console.WriteLine("我叫"+name+";体重:"+weight+"千克。身高:"+height+"cm");
            }
        }
    
    
     static void Main(string[] args)
            {
                student a = new student();
                a.name = "王小明";
                a.setHeight(170);
                a.setWeight(80);
    
                a.speak();
            }

    d

  • 相关阅读:
    Chandy-Lamport_algorithm
    3 differences between Savepoints and Checkpoints in Apache Flink
    列数 行数 表数 限制
    数据收集、传输、元数据管理、作业流调度、海量数据查询引擎、数据可视化
    分析云负载均衡产品
    端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则
    JSON Web Token
    查看开启端口的应用
    If the parts of an organization (e.g., teams, departments, or subdivisions) do not closely reflect the essential parts of the product, or if the relationship between organizations do not reflect the r
    微服务架构的理论基础
  • 原文地址:https://www.cnblogs.com/wllhq/p/4266206.html
Copyright © 2011-2022 走看看