Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在哪里可以找到转换为目标代码的过程代码示例_.net_Oop - Fatal编程技术网

.net 在哪里可以找到转换为目标代码的过程代码示例

.net 在哪里可以找到转换为目标代码的过程代码示例,.net,oop,.net,Oop,我正试着用面向对象编程来概括我的想法。但我有点麻烦。我(认为)我理解OOP是“好”设计的一般概念和理由。当我坐下来尝试编写面向对象的代码时,我的问题就出现了 我倾向于以非常程序化的程序结束,但偶尔会有一些对象被很好地抛进去……或者以他们正在做的事情来说,程序看起来长得可笑,复杂得离谱……一切都是一个对象;但是有很多很多的对象,继承树变得又长又丑 我一直试图找到的是一些非常好设计的OOP源代码的非平凡示例(我见过很多涉及猫、狗和动物的一次性/伪代码……但当我真的试图编写一些需要做的事情时,它们似乎

我正试着用面向对象编程来概括我的想法。但我有点麻烦。我(认为)我理解OOP是“好”设计的一般概念和理由。当我坐下来尝试编写面向对象的代码时,我的问题就出现了

我倾向于以非常程序化的程序结束,但偶尔会有一些对象被很好地抛进去……或者以他们正在做的事情来说,程序看起来长得可笑,复杂得离谱……一切都是一个对象;但是有很多很多的对象,继承树变得又长又丑

我一直试图找到的是一些非常好设计的OOP源代码的非平凡示例(我见过很多涉及猫、狗和动物的一次性/伪代码……但当我真的试图编写一些需要做的事情时,它们似乎没有帮助)。理想情况下,我正在寻找一些可以帮助我完成思考过程的东西。比如“好的-这里有一些程序代码,可以执行XYZ。现在,这里有一些非常棒的OOP代码,它们也可以做同样的事情


谢谢

我知道这是标记为.net的,但PHP就是一个很好的例子。在PHP5之前,PHP只是部分面向对象的。许多PHP开发人员在掌握OOP方面也有同样的问题

Zend有一篇很好的文章。这应该很容易理解


如果你觉得需要更好地指导面向对象的设计过程,你可能想看看麻省理工学院的开放式课件,特别是(课堂讲稿#2)或类似的东西

程序程序员在开始面向对象编程时经常遇到的问题是,他们继续设计程序,并尝试将其作为对象组织起来。那不行

面向对象编程是一种不同的设计方法
;对您在整个代码中分配的角色和职责的不同思考方式,而不仅仅是不同的编码方法


当你忘记了“狗是哺乳动物”的比喻(它永远不会转化为真正的应用),我推荐这本书:。这是我读到的第一本书,我终于明白为什么我必须停止查看(在我的例子中)C++作为“C++类被抛出”。

< P>一个非常直观的从C API到C++ API的转换在数据库中发生了很多;因此,对于本例,我们将快速了解一下使用MySQL API的区别

我不确定我是否可以从这些网站复制代码(不知道是什么许可证),但是请看C演示和C++演示;这两个步骤都是通过编程方式创建MySQL数据库

在C API中,每个函数的第一个参数都是数据库的“句柄”。在C++ API中,我们使用一个数据库连接对象,它隐含地调用具有它的私有句柄的C API。 看一个非常具体的示例,要在生成查询后执行查询,我们使用C:

mysql_query(conn, "create database testdb")
在C++中:

query.execute();
<> P>这里的最大区别是C++绑定只显示了你需要看到的内容,而在C中,你必须非常清楚地说明每一个细节。
我认为数据库API是通过示例学习OOP原则的好方法,因此希望它们也能帮助您。

事实是,这种转换通常不是好的面向对象代码。为什么?因为面向对象的代码不仅仅是将函数移动到方法中,将数据移动到成员中

相反,一个好的对象应该负责它的所有数据,并且只接受那些定义将要操作的数据的方法参数

这意味着没有从过程函数和过程数据结构到面向对象结构的1:1映射

环顾四周后,我没有在网上找到任何我感兴趣的示例,因此我将简单地给出将过程代码转换为OOP的重构规则

第一步是简单地将每个模块打包为一个对象。换句话说,只需创建一个包含数据和函数的对象。这对一个纯粹主义者来说是可怕的,但你必须从某个地方开始。例如,如果您有一个BankAccount模块,您现在将有一个BankAccount对象

显然,函数的数据是从外部调用传递到函数中的。在这里,您正在寻找如何将这些数据内部化并使其尽可能私有化。目标应该是在构造函数中获取数据(至少是起始点),删除用于手动接收数据的参数,并将其替换为对该私有数据的引用。使用BankAccount对象,对帐户的所有访问现在都是通过对象上的方法进行的,并且实际的帐户数据已经内部化

您的许多函数可能返回数据结构的修改版本:停止直接返回该数据,并将这些修改保留在私有结构中。创建访问器属性,在必要时返回您现在的私有数据,并将它们标记为“过时”(您的目标是使对象成为其数据的主对象,并且只返回结果而不是内部数据)。对于BankAccount对象,我们不再返回实际的帐户数据,但我们有CurrentBalance的属性和AverageBalance(int days)等方法来查看帐户

最终,您将拥有一组自包含的对象,这些对象与您从设计中的对象开始时所做的几乎没有相似之处,但至少您可以继续使用新对象进行重构。我的下一步通常是发现通过这种重构创建的对象有很多责任。此时,可能已经检测到一些公共线程,您应该创建对象来将这些公共思想重构为。如果我们有BankAccount,我们可能有其他帐户类型,如果我们调整met