gpt4 book ai didi

language-agnostic - 面向对象范式问题

转载 作者:行者123 更新时间:2023-12-04 07:29:25 27 4
gpt4 key购买 nike

尽管我已经编程了很长一段时间,但当谈到耦合对象时,我似乎总是把头撞在墙上,所以我想知道是否有人有任何我可以遵循的资源或黄金法则。

让我举一个小例子,没有特定的语言......

class Person {
private int personnel_id
private String first_name;
private String last_name;
private int personnel_level;
//Lab labs[4]; <- Lab(s) the Person works in
}

class Lab {
private int lab_id;
private String lab_name;
//Person[99] personnel; <- Person(s) working in the Lab
}

让我们暂时忽略 ctors/setter/getters/dtors 并实例化一些东西......
Person people = new Person[1500];
Lab labs = new Lab[10];

我的问题是......这里的最佳实践是什么......
people["Gordon Freeman"].blewUp((Lab)"Black Mesa");
-> returns T/F

或者...
labs["BlackMesa"].blownUpBy((Person)"Gordon Freeman");
-> returns T/F

或者这甚至无关紧要:S

我正在处理的现实生活中的例子要复杂得多。每当 Person做点什么,大家在 Lab需要通知等,我只是想弄清楚是否有任何原则可以在这里应用。

最佳答案

我的答案是几个现有答案的组合。

这里的基本问题是这里有一个隐藏的概念。该方法并不是真正谈论实验室对象或人对象,而是谈论它们之间的关系。 (正如@dacris 和@vs 所建议的那样)

处理这种情况的一种方法是使用双重调度的语言(谢谢,@Ken。)

另一种方法是使用自动生成的代码(谢谢@vs.),在这种情况下,任何一个方向都有可用的方法。

但通常这些解决方案并不实用——改变整个语言似乎有点过分。

不过,自动生成的解决方案为我们提供了洞察力。这两种技术都应该是合法的。因此,您可以手动实现这两种技术。

但是,如果您不想重复自己的话,这种方法可以清楚地表明任何一个方向都是合法的。所以不要出汗太多。

如果您正在编写一个系统,其中 Person 对象除了爆炸之外还有其他用途,那么从 Lab 到 Person 的耦合会更好(即将方法放在 Lab 对象上),这样 Person 对象就可以在其他地方使用而无需必须处理对 Lab 对象或与爆炸相关的方法的更改。

……反之亦然。如果一个人所做的只是爆炸,那么逻辑应该是保持实验室干净和原始(这对实验室很重要!)

关于language-agnostic - 面向对象范式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3252263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com