【从零开始入门unity游戏开发之——C#篇16】C#什么是面向对象编程?

文章目录

一、面向对象编程

1、面向对象编程简介

面向对象编程(OOP)是一种通过模拟现实世界事物 和它们的行为来设计和组织代码的方法。通过将相关的数据方法 (即函数)组织成 ,然后实例化为对象,来更加自然地描述和实现问题。

简单来说,面向对象就是把现实中的事物抽象成类和对象来编程

2、为什么要学习面向对象编程?

  1. 提高代码复用率

    面向对象强调通过"继承"和"组合"来复用已有的代码,不需要重新编写相同的功能,提高了代码的复用性。

  2. 提高开发效率

    面向对象的设计方法可以帮助我们清晰地划分程序的结构,使得开发人员更容易理解、修改和扩展代码,从而提高开发效率。

  3. 提高程序的可扩展性

    通过合理的类设计和封装,程序的扩展更加灵活。例如,在不改变现有代码的情况下,可以很容易地增加新功能。

  4. 清晰的逻辑关系

    面向对象使得程序结构更加直观和清晰。每个对象都有自己的属性和行为,清晰地表述了事物之间的关系。

3、面向对象的关键概念

  1. 类 (Class)

    • 类是模板蓝图 ,定义了一个对象的属性 (数据)和行为(方法)。
    • 例如,"汽车"类可以定义属性如颜色、品牌 ,以及行为如启动、加速
  2. 对象 (Object)

    • 对象是基于类创建的实例,是现实中的具体事物。
    • 例如,"我的红色宝马车"就是"汽车"类的一个对象。

4、面向对象的三大特性

  1. 封装 (Encapsulation)

    • 数据方法打包在一起,外部只能通过提供的接口(方法)与对象进行交互,而无法直接访问对象的内部数据。
    • 目的是隐藏实现细节,使得外部只能关心对象的行为,而不需要了解内部如何实现。
    • 例子:你不需要了解汽车的引擎如何工作,你只需要知道怎么开车。
  2. 继承 (Inheritance)

    • 通过继承,子类可以继承父类的属性和方法。这样可以复用父类的代码,同时可以在子类中添加特有的功能。
    • 例子:如果有一个"汽车"类,可以通过继承创建"电动汽车"类,电动汽车继承汽车的基本属性,同时添加充电等新特性。
  3. 多态 (Polymorphism)

    • 多态允许不同类型的对象使用相同的接口,表现出不同的行为。同样的操作,针对不同的对象可能会有不同的表现
    • 例子:我们有一个"动物"类,每个动物都能"叫"。但是狗和猫"叫"的方式不同,狗叫"汪汪",猫叫"喵喵"。这就是多态。

5、总结

面向对象编程是一种核心的编程思想,几乎所有现代的编程语言(如Java、Python、C#等)都支持面向对象设计。掌握了面向对象的核心概念和原则,你可以编写出更结构清晰、扩展性强、易于维护的程序。

从日常的应用开发到复杂的游戏、软件、网站开发,面向对象编程都在发挥着巨大的作用。学好面向对象编程,你可以更轻松地解决各种编程问题。


二、面向对象编程(OOP)和面向过程编程(POP)

面向对象编程(OOP)和面向过程编程(POP)是两种不同的编程范式。与面向对象编程对应的就是面向过程编程。当你理解面向过程编程的缺点了,也就更能体会面向对象编程的优势。

1、面向对象编程(OOP)和面向过程编程(POP)

  • 面向对象编程 强调通过"对象"和"类"来组织代码。它的核心思想是将数据和操作数据的行为封装在一起。OOP使用类和对象、继承、多态、封装和抽象等特性,使得代码更加模块化、可维护和可扩展。

  • 面向过程编程 是一种以"过程"为中心的编程方式,它把问题拆解成一系列的函数或者过程,然后按顺序调用这些过程。面向过程的代码更加注重操作数据的顺序和逻辑,通常没有像OOP那样的类和对象。

2、C# 和 面向过程

虽然 C# 是一门强大的面向对象语言,它确实也支持面向过程的编程方法。C# 是一种多范式语言,既支持面向对象编程,也支持一定程度的面向过程编程。

2.1. C# 中的面向对象编程(OOP)

C# 是以类为基础的编程语言,它鼓励使用面向对象的设计原则。你可以在 C# 中定义类、创建对象,并使用封装、继承和多态等特性。

csharp 复制代码
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public void Greet()
    {
        Console.WriteLine($"Hello, my name is {Name} and I am {Age} years old.");
    }
}

在这个例子中,Person 类封装了数据(NameAge)以及行为(Greet() 方法)。

2.2. C# 也支持面向过程编程

虽然 C# 的设计重心是面向对象编程,但你依然可以编写面向过程的代码,尤其是当你没有涉及到类和对象时。C# 支持声明方法(函数)并按顺序执行它们,这实际上就是面向过程编程的特征。例如:

csharp 复制代码
public class Program
{
    public static void Main(string[] args)
    {
        // 面向过程的代码
        int result = Add(5, 3);
        Console.WriteLine(result);
    }

    public static int Add(int a, int b)
    {
        return a + b;
    }
}

在这个例子中,Main 方法和 Add 方法更像是面向过程的结构,它们没有定义类的概念,仅仅是执行一些逻辑。

虽然这段代码执行的逻辑是面向过程的,完全符合"过程化"的编程风格,但由于 C# 是面向对象的语言,所以它要求将这些过程封装到类中。

3、PHP 和 面向过程

单看前面C#的面向过程,你可能还是很难看出区别。在实际应用中,C# 的面向过程编程通常已经融入了一些面向对象的概念,例如类、方法、属性等,因此仅从代码的形式上,很难严格区分面向过程和面向对象的区别。在前面简单的示例中,虽然程序逻辑看起来是顺序执行的(符合面向过程的编程风格),但代码组织却是基于类和方法的(面向对象的特征)。

如果你有其他一种语言的基础的话,你就应该更能明白什么面向对象编程的好处。比如我这里拿PHP举例。

PHP 是一门既支持面向对象编程也支持面向过程编程的语言。PHP 最初的设计更多偏向于面向过程,因为 PHP 的早期版本主要是用于脚本编程和处理网页请求。你可以用 PHP 编写纯粹的面向过程代码,像下面这样:

php 复制代码
<?php
function greet($name) {
    echo "Hello, $name!";
}

greet("Alice");
?>

然而,随着 PHP 的发展,它也引入了面向对象的编程特性,从而支持了类、对象、继承等特性。你可以在 PHP 中使用面向对象的方式来设计系统:

php 复制代码
<?php
class Person {
    public $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function greet() {
        echo "Hello, " . $this->name;
    }
}

$person = new Person("Alice");
$person->greet();
?>

4、总结

C# 是一门支持面向对象编程(OOP)为主的语言,但它也支持一定程度的面向过程编程。你可以在 C# 中写面向过程的代码,尤其是在不使用类和对象时。

面向过程编程虽然简单直接,在小型项目或短期任务中可能会很高效,但随着项目的增大和复杂性的提高,其缺点会变得越来越突出。面向对象编程(OOP)通过将数据和行为封装在对象中,并提供更好的模块化、封装、继承和多态机制,解决了很多面向过程编程中的问题。因此,对于更复杂、更大型的项目,OOP通常被认为是更优的选择。


专栏推荐

地址
【从零开始入门unity游戏开发之------C#篇】
【从零开始入门unity游戏开发之------unity篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架开发】

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

相关推荐
YONG823_API3 分钟前
电商大数据的几种获取渠道分享!
大数据·开发语言·数据库·爬虫·数据挖掘·数据分析
薔薇十字4 分钟前
【代码随想录day62】【C++复健】 97. 小明逛公园(Floyd 算法精讲);127. 骑士的攻击(A * 算法精讲)
开发语言·c++·算法
Sunyanhui111 分钟前
牛客网 SQL5将查询后的列重新命名
java·开发语言
白宇横流学长24 分钟前
面向特定群体的健康管理平台设计与实现[源码+文档]
java
SUN_Gyq29 分钟前
C++如何实现对象的克隆?如何实现单例模式?
java·开发语言·jvm·c++·算法
Beekeeper&&P...32 分钟前
AddressBookController
java·前端·网络
Cooloooo38 分钟前
最大堆【东北大学oj数据结构9-2】C++
java·数据结构·c++
小黄银技术栈43 分钟前
校园点餐订餐外卖跑腿Java源码
java·开发语言
向宇it44 分钟前
【从零开始入门unity游戏开发之——C#篇11】一个标准 C# 程序介绍、新的值类型——枚举
开发语言·vscode·unity·c#·游戏引擎
安年CJ1 小时前
Python 中的指针:深入理解与应用
运维·开发语言·python