面向对象编程——封装

面向对象编程——封装

什么???

封装是将数据和函数捆绑到一个单元(即胶囊)中的过程,它还可以限制对某些数据/方法的访问。

它是 oop 的四大支柱之一,其他三者分别是继承、多态性和数据抽象。

为什么

采取盲目假设并在所有地方继续使用封装会更容易,但了解原因很重要,这样您才能以正确的方式使用它。

让我们尝试通过查看示例任务来理解原因。

任务:

构建一个学生成绩计算器,

计算平均分确定学生是否失败或通过如果任何主题标记无效,则抛出错误 ( 100)

方案一:非封装方式

这个想法只是为了解决问题,所以我选择了过程式编程实现它的方式,我相信它可以显示出很好的对比并使问题看起来更明显。

type subject = "english" | "maths";interface istudent {  name: string;  marks: record;}// receive inputconst studentinput: istudent = {  name: "john",  marks: {    english: 100,    maths: 100,  },};// step1: validate the provided marksobject.keys(studentinput.marks).foreach((subjectname) => {  const mark = studentinput.marks[subjectname as subject];  if (mark > 100 || mark     studentinput.marks[current as subject] + accumulator,  0);// step3: find the averageconst average = totalmarks / object.keys(studentinput.marks).length;// step4: find the resultconst boolresult = average > 40;// step 5: print resultconsole.log(boolresult);console.log(average);

登录后复制

解决方案 1 的问题:

这确实达到了预期的结果,但也存在一些与之相关的问题。仅举几例,

这里的每个实现都是全局可访问的,并且未来的贡献者无法控制其使用。数据和操作是分开的,因此很难追踪哪些函数影响数据。您必须仔细检查每一段代码才能了解调用的内容以及执行的一部分。随着逻辑的扩展,函数变得更难管理。由于紧密耦合,更改可能会破坏不相关的代码。

如何解决问题?

通过合并封装或通过执行以下两个步骤使其更加明显,

对数据和功能的受控访问将数据与行为捆绑

解决方案2:封装方式

type SubjectNames = "english" | "maths";interface IStudent {  name: string;  marks: Record;}class ResultCalculator {  protected student: IStudent;  constructor(student: IStudent) {    this.student = student;  }  isPassed(): boolean {    let resultStatus = true;    Object.keys(this.student.marks).forEach((subject: string) => {      if (this.student.marks[subject as SubjectNames]  {      if (        this.student.marks[subject as SubjectNames]  100      ) {        throw new Error(`invalid mark`);      }    });  }  private totalMarks() {    return Object.keys(this.student.marks).reduce(      (acc, curr) => this.student.marks[curr as SubjectNames] + acc,      0    );  }  private subjectCount() {    return Object.keys(this.student.marks).length;  }}// Receive Inputconst a: IStudent = {  name: "jingleheimer schmidt",  marks: {    english: 100,    maths: 100,  },};// Create an encapsulated objectconst result = new ResultCalculator(a);// Perform operations & print resultsconsole.log(result.isPassed());console.log(result.getAverage());

登录后复制

注意上述解决方案,

方法totalmarks、subjectcount、validatemarks 和成员变量student 不公开,只能由类对象使用。

2.数据学生与其每一个行为都捆绑在一起。

以上就是面向对象编程——封装的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2647122.html

(0)
上一篇 2025年3月7日 07:55:00
下一篇 2025年2月19日 02:47:01

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 你的错误处理方式是错误的!

    你错误处理错误:可预测和标准化响应的案例 简介:固执己见的立场 javascript 中的错误处理是一个引起强烈意见的话题,我在这里分享我的观点:传统的 try-catch 方法笨重、不方便且过时。在 garmingo,我们构建了 garm…

    2025年3月7日
    200
  • 历史学家歇斯底里

    代码来临 2024 年第 1 天 第 1 部分 垒球以微笑开启新的一年 解决这个问题看起来很简单: parse the input into two equal lists of numberssort each list in ascen…

    2025年3月7日
    200
  • 加密货币交易机器人:自动化您的投资策略

    什么是加密货币交易机器人? 加密货币交易机器人是在各种交易所自动进行加密货币交易的程序。它们旨在根据预定义的算法执行交易,帮助交易者最大限度地提高效率、节省时间并减少情绪化决策。 这些机器人特别有用: 市场监控:机器人持续跟踪价格变动和市场…

    2025年3月7日
    200
  • 从 JavaScript 到 TypeScript:TypeScript 初学者指南

    如果您已经学习了 javascript,您可能想知道接下来要解决什么问题。有如此多的编程语言可供选择,做出决定可能会让人不知所措。但如果您一直在考虑提高 javascript 技能,那就不用再犹豫了——typescript 是一个很好的下一…

    2025年3月7日
    200
  • 首席技术官 (CTO) 的终极项目管理备忘单

    使用正确的工具、技能和资源掌握项目管理 通过这本全面的指南释放您作为项目经理的全部潜力,该指南涵盖从基本工具到职业道路和专业发展的所有内容。 简介:为什么项目管理技能在当今至关重要 项目管理不再仅仅关乎时间表和可交付成果,而是关乎推动业务各…

    2025年3月7日
    200
  • 从 JS 角度初看 C#

    我的旅程开始于…… 当我开始创建一个项目时,我的目标是构建一款可能具有 3d 元素、具有交互性、特别是在移动平台上玩的游戏。我还想将人工智能集成到游戏中以增加深度和复杂性。自然地,这促使我探索 c#——unity 游戏引擎中常用的一种语言。…

    2025年3月7日
    200
  • 测试 ReactJS 上下文 – 测试替身指南

    在这篇文章中,我将逐步介绍使用测试库测试依赖于上下文的 react 组件的思维过程。我的目标是探索一种不同的方法来测试这些组件,检查使用模拟与不模拟上下文的测试的优缺点。我们将研究每种方法如何影响测试的可靠性,并且我将分享关于何时以及为什么…

    2025年3月7日
    200
  • 使用 Vanilla JavaScript 进行安全文本加密和解密

    在当今的数字时代,保护 api 密钥、密码和用户数据等敏感信息比以往任何时候都更加重要。强大的加密和解密策略可以防止未经授权的访问并确保数据机密性。在这篇博文中,我们将探索如何使用普通 javascript 加密和解密文本,利用 web c…

    2025年3月7日
    200
  • Planby v:推出革命性的 Fetch 分析器

    Planby 团队发布了 3.12.0 版本,带来了一项创新功能:获取分析器。这一突破性的功能旨在重新定义调度应用程序中数据获取和请求处理的管理方式。以下深入探讨了 Fetch Analyzer 为何成为开发者和应用程序的游戏规则改变者。 …

    2025年3月7日
    200
  • 软件性能测试综合指南

    软件性能测试是评估软件和系统的效率和有效性的关键过程。在本文中,我们将探讨性能测试的概念并提供一种简单的执行方法。 了解软件性能测试 性能测试是用于评估软件和系统的性能和效率的关键过程。主要目标是确保系统满足所需的性能标准。 性能测试期间会…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论