C#面向对象的核心概念

一、面向对象的核心概念

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

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

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

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

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

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

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

1.封装

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

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

2.继承

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

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

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

3.多态

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

二、类与对象

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

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

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

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

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

(三)传值与传址

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

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

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

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();

 

例题:用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()));

        }

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

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 + "\n" + op.name + "的血量:" + op.HP);

        }

    }

 class people
    {
        public string name;
        public void attackDog(dog op)
        {
            op.HP -= 10;
            Console.WriteLine(name+"开始打狗\n"+op.name+"的血量:"+op.HP);
        }
        public void attackDog(dog op, int blood)
        {
            op.HP -= blood;
            Console.WriteLine(name+"开始打狗\n"+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);
        }

例题: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();
        }

时间: 2024-08-03 07:23:07

C#面向对象的核心概念的相关文章

面向对象的核心概念

1.面向对象的核心概念 从理论上说,面向对象技术拥有四大基本特性. (1)封装 这是一种隐藏信息的特征.封装这一特性不仅大大提高了代码的易用性,而且还使得类的开发者可以方便的更换新的算法,这种变化不会影响使用类的外部代码.可以用以下公式展示类的封装特性: 封装的类=数据+对此数据所进行的操作(即算法) 通俗的说,封装就是:包起外界不必需要知道的东西,只向外界展露可供展示的东西. 在面向对象理论中,封装这个概念拥有更为宽广的含义.小到一个简单的数据结构,大到一个完整的软件子系统,静态的如某软件系统

第一章 面向对象思想的核心概念

1. 面向对象核心思想 将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性,灵活性和可扩展性. 面向对象的核心思想是 对象,封装,可重用性和可扩展性. 2. 魔术方法的应用 __set() 设置外部无法访问的属性 __get() 获取外部无法访问的属性 __call() 调用不存在的方法时候会调用此方法 __callStatic() 调用不存在的静态方法时候会调用此方法 __toString() 打印对象属性 3.继承,组合与多态 类的组合:在一个类方法中实例化其他类作为自己的属

领域驱动设计(DDD)部分核心概念的个人理解(转)

领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践和经验技巧.只有对领域的不断深入认识,才能得到一个解决领域核心问题的领域模型.如果一个应用的复杂性不是在技术方面的,而是在领域本身,即领域内的业务很复杂,那这种应用,使用领域驱动设计的价值就越大. 领域驱动开发也是一种敏捷开发过程(极限编程,XP),强调迭代开发.在迭代过程中,强调开发人员与领域专家

《Spark大数据分析:核心概念、技术及实践》大数据技术一览

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问云栖社区"华章计算机"公众号查看. 大数据技术一览 我们正处在大数据时代.数据不仅是任何组织的命脉,而且在指数级增长.今天所产生的数据比过去几年所产生的数据大好几个数量级.挑战在于如何从数据中获取商业价值.这就是大数据相关技术想要解决的问题.因此,大数据已成为过去几年最热门的技术趋势之一.一些非常活跃的开源项目都

《JavaScript核心概念及实践》-- 读书笔记

前言: 程序设计语言主要分为两种  1.基于存储原理(冯*诺依曼体系)的命令式编程语言,如C/C++.Java.Object Pascal(DELPHI).                              2.根据阿隆左*丘琦的lambda演算而产生的函数式编程语言,如Lisp.Scheme.                              这两种语言互不干涉的时代(javascript出现以前),程序=数据结构+算法                            

第二章 函数编程的核心概念

第二章函数编程的核心概念 本章介绍 ■了解概念和基础 ■不可变数据编程 ■函数式代码的推论 ■函数式值和数据类型 如果你问三个函数程序员,什么是函数范式最基本的方面,很可能有三个不同的答案.原因是函数编程已经存在很长时间了,各种不同的编程语言应用范围很广泛:每种语言强调的重点不同,但对于其他的语言来说,可能并不重要:但其中的大部分概念在所有的函数式语言中都有所表现. 本章的中央部分侧重于这些共同的概念,探讨函数式程序员工具集的基本特征和技术.我们将宏观地研究这些概念,你将看到如何组合起来,形成连

从经典架构项目中透析微服务架构的核心概念和充血模型

微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢? 我们先看相同点: 需要Registry,实现动态的服务注册发现机制:需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑:同步调用还是异步消息传递,如何保证消息可靠性?SOA由ESB来集成所有的消息:都需要统一的Gateway来汇

java面向对象的基本概念

面向对象的基本概念 这里先介绍面向对象程序设计的一些关键概念,并开始使用类,你需要学习一些术语,我们尽量用比较浅显的语言来介绍,因为这些内容都比较重要,所以希望大家好好好理解. 一.什么是对象和面向对象的编程. 对象就是存在的具体实体,具有明确定义的状态和行为,是面向对象编程的核心,用来描述现实世界中的实体,为计算机应用程序提供实体基础,也是完成特定任务一个封装.这样描述对象却是有点罗嗦.因为与传统的C语言不通,C语言是过程语言,而java语言是面向对象的语言,所以对象是java语言的核心. 那

Orleans 知多少 | 2. 核心概念一览

Orleans 术语解读 上面这张图中包含了Orleans中的几个核心概念: Grain Silo Orleans Cluster Orleans Client 从这张图,我们应该能理清他们之间的关系. Grain作为最小的执行单元 Silo 是 Grain 的宿主运行环境,用来暴露具体的服务 Orleans Server 提供Silo的运行环境 一个Server可以运行多个Silo服务 多个Silo组成一个Cluster集群 一个Cluster中的Grain是可以直接进行交互 客户端通过Orl