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

ops/2024/12/19 11:23:39/

文章目录

  • 一、面向对象编程
    • 1、面向对象编程简介
    • 2、为什么要学习面向对象编程?
    • 3、面向对象的关键概念
    • 4、面向对象的三大特性
    • 5、总结
  • 二、面向对象编程(OOP)和面向过程编程(POP)
    • 1、面向对象编程(OOP)和面向过程编程(POP)
    • 2、C# 和 面向过程
      • 2.1. C# 中的面向对象编程(OOP)
      • 2.2. C# 也支持面向过程编程
    • 3、PHP 和 面向过程
    • 4、总结
  • 专栏推荐
  • 完结

一、面向对象编程

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# 中定义类、创建对象,并使用封装、继承和多态等特性。

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# 支持声明方法(函数)并按顺序执行它们,这实际上就是面向过程编程的特征。例如:

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
function greet($name) {echo "Hello, $name!";
}greet("Alice");
?>

然而,随着 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

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


http://www.ppmy.cn/ops/143165.html

相关文章

repmgr集群部署-PostgreSQL高可用保证

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

海外媒体宣发对品牌出海的多维影响-大舍传媒

海外媒体宣发对品牌出海的多维影响 一、海外媒体宣发有助于品牌海外 SEO 海外媒体发稿是重要的海外公共关系工具&#xff0c;对于品牌想在海外宣传并引起关注具有重要作用。有效的新闻稿发布能够提高品牌的 SEO 排名&#xff0c;因为发布的新闻媒体网站的谷歌 PR 通常较高&…

多表查询的分类与实现

可能会出现的错误&#xff1a; 笛卡尔积的错误会在下面条件下产生&#xff1a; 省略多个表的连接条件&#xff08;或关联条件&#xff09; 连接条件&#xff08;或关联条件&#xff09;无效 所有表中的所有行互相连接 如何避免&#xff1a; 可以在 WHERE 加入有效的连接条…

wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势

开发CuteMySQL/CuteSqlite开源客户端的时候&#xff0c;需要使用Scintilla编辑器&#xff0c;来高亮显示SQL语句&#xff0c;作为C/C领域最成熟稳定又小巧的开源编辑器&#xff0c;Scintilla提供了强大的功能&#xff0c;wxWidgets对Scintilla进行包装后的是控件类&#xff1a;…

Web安全攻防入门教程——hvv行动详解

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中&#xff0c;保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现&#xff0c;还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻…

灵当crm pdf.php存在任意文件读取漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…

Focal Loss损失函数理解

简介&#xff1a;Focal Loss损失函数是对交叉熵损失函数的升级。是和yolo配套的 因为yolo会对图像进行网格化处理&#xff0c;会分出正负样本&#xff0c;是多目标检测&#xff0c;而不是简单的分类问题 1. 对比交叉熵损失的区别 多分类&#xff1a;CrossEntropyLoss 公式&a…

Java集合(完整版)

集合框架 Collection集合 概念&#xff1a;对象的容器&#xff0c;定义了对多个对象进行操作的常用方法。可以实现数组的功能 和数组的区别&#xff1a; 数组的长度固定&#xff0c;集合长度不固定数组可以存储基本类型和引用类型&#xff0c;集合只能存储引用类型 Collec…