- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题是off-topic .它目前不接受答案。
想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。
10年前关闭。
Improve this question
我一直在做我自己的一些项目,没有任何工业接触。目前,我使用简单的方法来开发具有可忽略不计的 OO 方法的小型应用程序,例如使用函数的多态性为数据库函数创建一个通用类,稍微使用构造函数,但我真的不知道如何使用 OOP 实现整个项目逻辑。
我知道什么是接口(interface)、抽象类、密封类和其他 oops 概念,并且非常清楚。但问题是我应该何时以及如何在我应该的地方大量实现 OOP。
我是否需要研究实时应用程序及其案例研究,如果需要,请向我推荐一些网站或书籍/电子书,我可以从中阅读并能够实现它们。
目前我在编程时觉得自己不完整。我有效地实现了数据库及其大部分组件,但是在尝试使用 OOP 时还是个 child 。
我已经阅读了许多示例,这些示例试图让人们理解 OOP 之类的形状,例如汽车。所有这些。
他们很想清楚概念,但不足以在一些现场项目中实现
最佳答案
学习应用 OOP 的第一步是将常见的功能和数据收集到类中。一开始你不会做得很好,但你会变得更好。一个 recent article in Code Magazine关于回归基础很好地表达了这一点。
开始尝试使(将成为)真正的类(class)代表真实事物的对象在您的解决方案中。 (有一个 fancy name 用于此,但它也是非常基本的。)这并不是让实用程序类成为方便的、与主题相关的功能。尝试安排事情,以便在对象中维护的数据在调用该对象的方法时为您保存参数。将存在的对象想象为社区中真实的个体事物。拟人化他们。安排事情,这样您在使用它们的功能时就不必担心类里面发生了什么。
我会不用担心所有这些设计模式首先。最好先练习您所学的基本 OOP 概念。专注于这些模式会导致很多人跳过真正思考 OOP 的哲学,而是试图将他们的情况塞进一个预先打包的计划中。阅读有关娱乐和创意的“设计模式”。稍后,您将想要真正研究它们并尝试专门实现其中的一些。
简而言之,你必须投入并开始应用你所学的知识。在你做出一些好的设计之前,你需要先做出一些糟糕的设计,所以不要担心。
根据提问者 的评论进行编辑:
我认为下一步可能是专注于你的类之间的关系。例如,一旦您在逻辑中使用了 Customer 对象,您就必须不费吹灰之力获取相关的 Order 对象。做一个属性oCustomer.Orders
,返回 List<Order>
. (这是一个 c# 示例。)在此属性中获取该客户的所有订单,将它们放入列表对象中,将其保存在私有(private)变量中以防再次调用该属性,然后返回该列表对象。如果您已经这样做了,请寻找下一个最难尝试的新事物。也许您需要经常查找客户首次下订单的日期。然后,创建一个继承自 Collection<order>
的 Orders 类。替换您的基本 List<order>
,并添加属性 FirstOrder。然后你可以做var FirstOrderDate = oCustomer.Orders.FirstOrder.OrderDate
.
继续尝试 下一个最难的新事物 .继承和添加成员。用子类创建一个基类。覆盖基类成员。使用并获得良好的自定义集合。
从您正在使用的对象模型中学习。当你看到一些东西时直观的并且易于使用,就这样做吧!在我职业生涯的早期,我不得不广泛使用直观且简单的 MS-word 对象模型。当我创建自己的库时,我试图复制这种感觉。结果很好。
最终研究 patterns .尽管我建议你不要被它们吓到,它们是一个很好的想法来源,最重要的是 尝试的东西 . (了解常见“模式”的名称也有助于交流。)例如,当您看到 plug-in model ,接口(interface)的概念才真正有意义。
关于.net - 尽管我了解大多数 OOP 概念,但我无法清晰地描绘实现 OOP 概念。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1959295/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
我正在开发一个 Android 应用程序。在此应用程序中, Logo 栏显示在所有页面( Activity )上,或者我们可以说它在所有页面上都有标题。这个 Logo 栏有几个图标,如主页、登录、通知
我正在使用 hadoop 使用开源接口(interface) HVPI 处理视频。然而,inputsplit 的实现,更准确地说是在 isSplitableobContext (context, Pa
1. 是什么? MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System
有没有办法使用 c++20s 的概念来检查一个值是否满足某些要求? 假设我正在编写某种使用分页的容器,并且我想让页面大小成为模板参数。 template class container; 我可以使用带
如何在 ArrayList 中循环遍历 ArrayList? 例如,如果我有一个名为 Plants of Plant 对象的 ArrayList。每个 Plant 对象内部都有一个随机数量的花名。我如
如何在UML类图中绘制C++概念? 具体来说,我有以下代码: template concept Printable = requires(T a, std::ostream &where) {
我有兴趣制作一个网站,在访问者访问时闪现整个网络历史记录。我计划使用 JavaScript 来获取每个观看者计算机上的历史记录,并根据他们拥有的内容以不同的速度对其进行动画处理。我的想法是使用 his
有一个模板定义,例如: template void foo( void ) { /* ... */ } 如何定义一个概念,以便N必须为非零正值(N> = 1)? 就像是: template con
封装是信息隐藏还是导致信息隐藏? 正如我们所说,封装将数据和函数绑定(bind)在单个实体中,因此它为我们提供了对数据流的控制,并且我们只能通过一些定义良好的函数来访问实体的数据。因此,当我们说封装导
下面有一个简单的代码片段,它使用以下方式进行编译: g++-9 -std=c++2a -fconcepts 这是试图定义一个需要存在函数的概念。我希望输出是"is",但事实并非如此……知道为什么吗?谢
我有一个普通二元运算符的概念 template concept is_binary_operation = requires (const T& t1, const T& t2) // e.g
我正在c++ 20中实现具有启发式功能的搜索算法。 我试图用类似这样的概念来约束我的算法可以使用的功能: template concept Heuristic = requires(SelfType
我需要了解 SAS 如何读取/执行数据步骤。当我查找有关 SAS 如何读取数据步骤的信息时,我似乎只找到有关它如何读取以进行合并的信息,我不了解与常规数据步骤相关的信息。比方说,我有这行代码: dat
最近我看到一个关于“框架”的问题,如果“框架”有不同的类型或概念。那么,存在不同“类型”的“框架”吗? 例如:NodeJS 是一种“类型”(概念),而 Hibernate ORM 是另一种“类型”(概
如何使用任何技术禁用或清除客户端浏览器 Cookie 我认为使用 javascript 可以用于任何技术 最佳答案 var cookies = document.cookie.split(";");
我正在使用 target = "_blank" 单击链接时生成新选项卡。但是,浏览器会将焦点移至该选项卡。 有没有办法让焦点保持在当前标签页上? 回答摘要 基本上,只需发送一个模拟控件点击的当前事件。
我正在尝试在我的 android/firebase(cloud firestore) 应用程序上添加一项需要其他用户批准/拒绝的功能。例如,当 Air&BnB 上的用户想要预订一个地方时,所有者必须批
这个问题在这里已经有了答案: mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc... expec
public class MyClass { public static void main(String[] args) { System.out.println("Hell
我是一名优秀的程序员,十分优秀!