面向对象编程oop(代码片段)

author author     2022-12-11     517

关键词:

这节讲一下,什么是面向对象(Object Oriented Programming)。说面向对象之前,我们不得不提的是面向过程(Process Oriented Programming),C语言就是面向过程的语言,这两者的区别在哪呢?我们可以设想一个情景——厨房做菜:

以面向过程的形式解释来说,第一步:准备材料,第二步:起火,第三步:炒菜,第四步:上菜;面向过程就是编写一个个函数,每个函数执行一部分操作,最后根据这一套函数,执行下来完成一个整体需求为目的。

那面向对象呢,我们同样的解释做菜说,第一步:要有厨师,灶台,要有服务生,第二步:厨师准备材料,第三步:灶台起火,第四步:厨师炒菜,第五步:服务生上菜。面向对象的编程方式,将原本各个独立的函数,用它所属的对象规整了起来,并封装成方法(面向对象中的"函数"有个新的称呼叫方法Method)。虽然实际上代码量会变多,但是这种编程思维是合情合理的,符合实际的,让人更容易理解,因为每个对象的职责是明确的,从而后期维护会变得更方便。

下面在代码层面,演示一下面向对象和面向过程的区别:

过程化:

#include "stdio.h"
?
void Prepare()
  printf("准备食材。
");

void Fire()
  printf("起火
");

void Cooking()
  printf("炒菜,
");
  printf("炒完了
");

void Serve()
  printf("请享用。");

?
main()
  Prepare();
  Fire();
  Cooking();
  Serve(); 

技术图片

对象化:

//创建三个对象
//厨师
class Cook

    //准备食材的方法
    public void Prepare()
    
        Console.WriteLine("厨师准备食材。");
    
    //做饭的方法
    public void Cooking()
    
        Console.WriteLine("厨师正在做饭...");
        Console.WriteLine("厨师做好了。");
    

//灶台工具类
static class CookingBench

    //静态工具方法:起火
    public static void Fire()
    
        Console.WriteLine("灶台生火。");
    

//服务员
class Waiter

    //上菜方法
    public void Serve()
    
        Console.WriteLine("请享用。");
    

在主方法中调用:

Cook cook=new Cook();
Waiter waiter=new Waiter();
?
cook.Prepare();
CookingBench.Fire();
cook.Cooking();
waiter.Serve();

技术图片

面向对象有三大特征:封装,继承,多态。下面详细讲一下:

封装:

每个人都有自己的秘密,在面向对象的代码中也是如此,对象中,有可以被外界查看的,也有不对外界查看的,这种将一些成员隐藏起来的思想就是封装,实现封装,需要先了解一下四个访问修饰符:public, private, protect, internal

访问修饰符可以修饰类,属性,方法,使用修饰符修饰类或属性、方法,具有不同的访问级别。声明时访问修饰符要写在最前:

public class publicClass//声明一个类
private bool isPublic;//声明一个属性

public:公共的,这个访问级别最低。

private:私有的,故名思义,这个访问级别最高,只能在声明的作用域内访问。
protect:受保护的,只能在继承链上被访问,说白了只有继承了一个类,才能访问这个类中protect修饰的成员。

internal:内部的,只能在同一个程序集中访问。可以狭义的理解为同一个命名空间下可以访问。

还有一个组合拳:protect internal,这就是既要满足同一个程序集,又得是继承的关系才能访问。

通过这几个关键字,我们就可以实现封装。开发的时候只需要明确写的类或者属性,方法等分配什么样的访问权限即可。

继承:

继承的概念,也很容易理解,它就好比现实生活中,孩子继承父母的家产,那么父母的东西就成了孩子的,在C#中,类和类之间实现继承是通过":"来实现的。

public class Father
public class Chlid:Father//Child类继承了Father

注意,C#是单继承的语言,也就是说一个类只能继承一个父类。

子类可以继承父类中非private的属性或方法,如果private的属性或方法能访问,也就不会有protect这个关键字存在。通过继承,我们可以将子类共有的重复代码抽离到父类中,这样所有的子类就不必声明这些成员,就减少了很多代码量。在C#的继承结构中,object类是所有类的父类,任何一个类都是默认继承object。object类为我们提供了一些类中最最基础的成员,如我们常用的tostring()方法。

面向对象中有个原则叫开闭原则,这个原则规定对修改封闭,对扩展开放,也就是说,当写了一个类并使用了一段时间后,因为项目升级或者其它原因,我们需要修改这个类(添加一些新东西),这时,根据开闭原则,我们就不能直接修改,而是要再写一个类,去继承它,在子类中添加新的业务逻辑,这也是继承的一个用途。

继承中,还有一个概念叫做方法的重写,就是说,子类中有一个方法和继承父类的方法名一样,这样子类方法就把父类方法给覆盖了,这个过程就是重写。这个概念在具体介绍类和方法的小节中会详细展开。

多态:

多态依赖继承,有继承才能实现多态。同一个类,有不同的形态就是多态。比如狗这种动物,有不同的形态:哈士奇,田园犬,柯基等。在代码中的体现就是父类可以接收子类为其赋值。还是拿上面的例子来说,以下代码就是多态例子:

Father f=new Chlid();

多态性的依据是里氏转换原则:子类继承父类,那么,原来适用于父类的场景,一定适用于子类,因为子类继承了父类的所有显式功能,父类能做的,子类也能做。这一原则就是定义这个理论的存在,子类可以直接替代父类,将父类全部转换为子类,程序的行为没有区别。

多态性也面向对象编程中很重要的基石,我们一般在编程中尽可能地使用接口,面向抽象,降低耦合,因为多态性,我们才能通过接口或一些抽象的数据结构来实现实例的操作。

最后通过一个例子演示一下多态(涉及到类和方法的一些知识会在下节类和方法中详解):

     public class Dog
    
    public string name  get; set; 

    public Dog(string name)
    
        this.name = name;
    

         public void introduce()
    
        Console.WriteLine("这是一只:" + name);
    
    
    ?
    public class Husky : Dog
    
    //调用父类的构造方法,为name赋值
    public Husky():base("Husky")
    
    ?
    public class Koji : Dog
    
      public Koji() : base("Koji")
    
    ?
    class DogStore
    
    public Dog dog  get; set; 
    ?
    public DogStore(Dog dog)
    
        this.dog = dog;
    
    ?
    public void wantBuy()
    
        Console.WriteLine("Do u want this "+dog.name+"?");
    
    

以上代码中有一个共同的Dog类,分别有两个类哈士奇,柯基继承了它。还有一个宠物狗商店,需要Dog这个属性。

下面看一下主方法中的代码:

DogStore dogStore=new DogStore(new Husky());
dogStore.wantBuy();
dogStore=new DogStore(new Koji());
dogStore.wantBuy();

技术图片
我们通过父类,接收更加具体的子类,这就是多态性很好的体现,这也是很优雅高效的编程方式。

 个人公众号,热爱分享,知识无价。

技术图片

面向对象(oop)基本概念(代码片段)

面向对象编程--ObjectOrientedProgramming简称OOP目标了解面向对象基本概念0.1面向对象基本概念面向过程和面向对象,是两种不同的编程方式对比面向过程的特点,可以更好第了解什么是面向对象1.1过程和函数过程是早期的一个编程概... 查看详情

面向对象简介(代码片段)

一、学习目标1.面向对象的技术语法2.面向对象的编程思想二、面向对象的概念OOP(Object-Programming,面向对象的编程)技术为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重用性。三、OOP达到了... 查看详情

2021年最新python讲义:面向对象(oop)基本概念(代码片段)

面向对象(OOP)基本概念面向对象编程——ObjectOrientedProgramming简写OOP目标了解面向对象基本概念01.面向对象基本概念我们之前学习的编程方式就是面向过程的面相过程和面相对象,是两种不同的编程方式对比面向过程的特点... 查看详情

oop面向对象(代码片段)

...步骤来处理这个问题,这是我们常规思维,这就是所谓的面向过程POP编程二、面向过程POP为什么转换为面向对象OOP面向过程想的思想步骤越多,变化越多,是无法掌控的,所以有时候非常复杂,就比如我们拿起来手机玩游戏如果... 查看详情

python面向对象:面向对象(oop)基本概念类和对象基础语法封装案例私有属性和私有方法(代码片段)

一、面向对象(OOP)基本概念面向对象编程——ObjectOrientedProgramming简写OOP目标了解面向对象基本概念01.面向对象基本概念我们之前学习的编程方式就是面向过程的面相过程和面相对象,是两种不同的编程方式对比面向过程的特... 查看详情

面向对象编程(上)(代码片段)

第四章面向对象编程(上)4.1面向对象(OOP)和面向过程(POP)4.2Java语言的基本元素:类和对象4.3对象的创建和使用4.1面向对象(OOP)和面向过程(POP)面向对象和面向过程二者都是一种思想,面向对象是相对于面向过程而... 查看详情

面向对象(oop)基本概念(代码片段)

 面向对象编程 —— ObjectOrientedProgramming 简写 OOP 01.面向对象基本概念我们之前学习的编程方式就是 面向过程 的面相过程 和 面相对象,是两种不同的 编程方式对比 面向过程&nb... 查看详情

第四章面向对象编程(上)(代码片段)

第四章面向对象编程(上)4.1面向对象(OOP)和面向过程(POP)4.2Java语言的基本元素:类和对象4.3对象的创建和使用4.1面向对象(OOP)和面向过程(POP)面向对象和面向过程二者都是一种思想,面向对象是相对于面向过程而... 查看详情

面向对象编程(oop)

面向对象编程(OOP)Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:代码开发模块化,更易维护和修改。代码复用。增强代码的可靠性和灵活性。增加代码的可理解性。面向对... 查看详情

c#003.面向对象oop(代码片段)

文章目录面向对象OOP屏蔽(隐藏)new和base继承和扩展new对象初始化反射创建实例dynamic编程面向对象OOP屏蔽(隐藏)new和base派生类不能删除成员、但可以屏蔽成员屏蔽就是不使用父类的成员有点类似java的supernew关... 查看详情

c#003.面向对象oop(代码片段)

文章目录面向对象OOP屏蔽(隐藏)new和base继承和扩展new对象初始化反射创建实例dynamic编程面向对象OOP屏蔽(隐藏)new和base派生类不能删除成员、但可以屏蔽成员屏蔽就是不使用父类的成员有点类似java的supernew关... 查看详情

golang学习+深入-面向“对象“编程(代码片段)

...创建结构体变量时指定字段值1.4、工厂模式1.5、抽象1.6、面向对象编程三大特性2、方法2.1、方法注意事项和细节讨论3、接口(interface)3.1、注意事项和细节3.2、接口排序3.3、接口VS继承一、概述1、结构体一个程序就是一个世界ÿ... 查看详情

第八篇python面向对象编程(代码片段)

11面向对象编程面向对象编程——ObjectOrientedProgramming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合... 查看详情

[java]java基础语法和面向对象编程(oop)(代码片段)

一、基础语法1.JDK、JVM与JRE之间的关系JVM是一个虚拟的计算机,具有指令集并使用不同存储区域。负责执行指令,管理数据、内存、寄存器,包含在JDK中JDK=JRE+Java开发工具(java、javac、javap、javadoc······&#x... 查看详情

面向对象_object-orientedprograming(oop)(代码片段)

面向过程编程把计算机程序视为一系列的命令集合,即一组函数的顺序执行(把大块函数通过切割成小块函数来降低系统的复杂度)面向对象编程Object-OrientedProgramingOOP把计算机程序视为一组对象的集合,而每个对象都可以接收其他对... 查看详情

面向对象编程

主要内容介绍:什么是面向对象编程 OOP技术WindowsForms应用程序对OOP的依赖关系 什么是面向对象编程使用OOP技术,常常要使用许多代码模块,每个模块都提供特定的功能,每个模块独立,这种模块化编程方法提供了非常大... 查看详情

javase之类与对象(代码片段)

...必须要掌握类与对象,这样可以从深层次去理解java这种面向对象语言的开发理念,从而更好的掌握java编程思想与编程方式。OOP概述Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-OrientedProgramming,OOP)... 查看详情

c++笔记--面向对象(oop)编程基础--类的继承及多态(代码片段)

目录继承继承基本概念访问权限继承中的构造和析构 继承与组合混搭情况下,构造和析构调用原则多继承(摒弃,忘记)赋值兼容性原则继承继承基本概念访问权限C++中的类成员访问级别(public、private、protected&#... 查看详情