作为理解OOP和Procedural语言之间差异的一种方法,我一直在寻找用C和C++或C#或Java编写的示例程序.我只想看到同一问题的不同方法,以帮助我了解真正的差异.有谁知道我在哪里可以找到这样的教程?
我有一个小的PHP项目(大约3000行),我需要制作它的BASIC UML模型,从使用图,序列图和状态图的情况开始,可能是类图,并可能用协作图扩展它.
我是UML建模的新手,这是我第一次将模型从实现中取出而不是相反(不是非常有用,除非你进入逆向工程,但无论如何,这是一个分配)
现在,我应该如何处理这个问题?如果我的项目有OO实现,一些UML工具可以让我的生活变得非常简单,但事实并非如此,所以我想知道我是否应该将我的项目重写为OO以及如何做(我的意思是,是否有一些标准的基础我应遵循的指导方针或程序?),或者我是否应该按原样制作项目模型(在这种情况下,哪种建模工具最好).
我的项目也是在Eclipse IDE上编写的,有人知道它的任何插件来帮助我完成这个UML建模任务吗?
我不得不编写一个超过 600 行和大约 25 个函数的 C 程序。这是我写过的最长的 C 代码。
我注意到一些函数有超过 5 个参数。直接从 main() 调用的那些有更多的参数。它离 main() 越远,越少。
我还注意到我经常不得不将参数传递给函数,不是因为该函数直接使用该参数,而是该函数调用另一个需要该参数的函数。
所以它看起来像
void f1(int a, int b,..., int bar){
int foo = f2(bar); // the only time 'bar' is used in f1
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
我试图尽量减少全局变量的使用,但我不得不声明一些全局变量,因为有些参数变得过于冗余。基本上我必须将这些参数传递给每个函数。
我不是一个有经验的程序员,但是当我用 Java 编程时,我认为我不需要编写一个超过 5 个参数的方法。
在 C 中传递比其他语言更多的参数是否正常?这只是过程式编程与面向对象编程的本质吗?还是我只是在写不好的 C 代码?
我只是对那里的所有语言类型感到有些困惑.与面向对象/程序的区别相比,高级/低级语言区别之间有什么区别 - 如果有的话?许多类比似乎相似.
我知道有关OOP和程序之间差异的无数问题,何时使用以及利益是否超过额外开销,学习语法,继承混淆等等.我发现的大部分内容往往只讨论差异和好处而不是它是否必要.
我通常在相同的站点脚本中混合OOP和程序,这取决于我正在做什么.我仍然是OOP的新手,实际上非常喜欢OOP的模块化特性及其带来的好处,即使有轻微的开销.有时候继承可能会有点混乱!
对我来说,主要的好处似乎只是更好地组织和保护代码.其中,开发人员或开发团队是唯一欣赏它的人.我想有一个部署速度的情况,但不会说大多数网站都有很多,除非你继承了别人的鸟类:)
在大多数PHP应用程序中是否需要OOP,特别是当执行速度是大多数网站的圣杯时?好的,所以毫秒的开销不会真正注意到,除非一个繁重的使用网站,但作为电子音乐速度的粉丝是王!
我在游戏和实时云软件等复杂的东西中使用OOP,但静态网站呢?即使数据库很重?
有没有人拥有从OOP中受益的典型网站的真实世界示例?为什么?
假设这两个案例结构合理,那么像ebay或monster.co.uk这样的大量使用网站会从OOP或程序()的速度提升中获益更多吗?为什么?
至少在程序上你可以从上到下进行调试,而不必在脚本周围跳过来检查类和扩展和接口.
我不能只使用清晰的MVC和评论良好的代码来应用OOP模块化思维吗?
例如,我将包含文件和组相关功能中的可重用功能保存在一起.我所要做的就是像文件一样包含文件并调用函数.如果函数需要更改,它只会在一个地方更改,类似于一个类.
并且在程序中已经存在一种继承,而不必通过箍来声明它.您没有相同级别的控制权,但它可以很好地快速完成工作.
您甚至可以通过在父函数中对函数进行分组来模拟类,并使用选择器函数来访问它们.虽然这有点远!
此外,据我所知,当一个函数被调用时,它会保留在内存中,从而使后续使用更快.而使用OOP,您必须创建各种方法的两个对象,以便为两个不同的变量使用相同的函数.如我错了请纠正我.
为什么在我可以直接用过程引用值时创建一个对象并使用一种方法"获取"一个值?
为了达到这个目标做得很好,没有意识到我输入了这么多.无论如何,在我离开之前,我将在这里结束它.
因此,如果您有任何实际网站或部分网站受益于OOP或程序的好例子,我将非常感谢清晰度.
我知道Stackoverflow上有很多与自定义错误处理程序相关的问题.但是,在阅读了其中许多内容以及PHP手册之后,我仍然无法解决我的问题.因此我发布了这个问题.
我的脚本目前以这种方式构建:
require 'file.php';
require 'anotherFile.php';
// several more "require" here. These files contain many functions
function myErrorHandler($errno, $errstr, $errfile, $errline, $errcontext){
// some code to handle errors here
}
class myObject {
function __construct() {
// set the values here
}
function computeSomething() {
...
doFunction2();
...
}
function SomethingBadHappened()
{
}
}
function doFunction1() {
// for some reason, an error happens here
// it is properly handled by the current error handler
}
function doFunction2() {
// …Run Code Online (Sandbox Code Playgroud) 我正在学习多维数组,我对多维数组如何工作以及如何使用它们有所了解,除了一件事,在什么情况下我们需要使用它们?为什么?
当我写入Pascal中的外部文件时,即使编码完美无缺,外部文件也不会完全写入.
procedure save;
{Menyimpan data penerbangan ke dalam file eksternal}
begin
write('> ');
write('nama file: ');
readln(namafisik);
assign(d,namafisik);
{$I-};
rewrite(d);
{$I+};
if (IOresult=0) then
begin
for i:=1 to Neff do
writejadwal(i);
end;
end;
procedure writejadwal(i:integer);
{Menuliskan jadwal ke file eksternal pada indeks ke-i}
begin
write(d,T.KodePenerbangan[i]);
write(d,' | ');
write(d,T.KotaKeberangkatan[i]);
write(d,' | ');
write(d,T.KotaKedatangan[i]);
write(d,' | ');
if ((T.TKeberangkatan[i].Day) < 10 ) then
begin
x:=T.TKeberangkatan[i].Day;
str(x,y);
s:=y;
write(d,'0'+s);
end
else
begin
write(d,T.TKeberangkatan[i].Day);
end;
write(d,':');
if ((T.TKeberangkatan[i].Month) < 10 ) then
begin …Run Code Online (Sandbox Code Playgroud) pascal procedural-programming freepascal lazarus turbo-pascal
从我可以收集到的过程编程使用过程和函数或子例程。它提供了有关如何操作的分步说明。虽然另一方面面向对象我并不完全确定。我所看到的只是它使用“对象”并且几乎相同?有人可以澄清并解释对象究竟是什么吗?
我想从以JSON格式给出的AST构建控制流图(CFG).所以这个AST是在TouchDevelop中针对每个脚本自动创建的.而且由于TouchDevelop不是面向对象的编程,我还可以使用访问者模式吗?任何有用的指针将不胜感激.
Update1:我的问题是我不明白从哪里开始.从互联网上,我应该使用访问者模式来浏览AST以访问每个节点并收集信息.从那里,我可以构建一个CFG,然后进行数据流分析.但有两个问题:
1)据我所知,我需要面向对象的编程模型,使用访问者模式,(我可能是错的),这TouchDevelop不是.
2)如下所示,AST不是AST格式,正如我在互联网上找到的那样.它是JSON格式.我想我可以解析JSON将其转换为所需的AST结构,但我不太确定.
示例脚本的源代码
meta version "v2.2,nothing";
meta name "DivideByZero";
//
meta platform "current";
action main() {
(5 / 0)?post_to_wall;
}
Run Code Online (Sandbox Code Playgroud)
产生的AST(JSON格式)如下:
{
"type":"app",
"version":"v2.2,nothing",
"name":"DivideByZero",
"icon":null,
"color":null,
"comment":"",
"things":[
{
"type":"action",
"name":"main",
"isEvent":false,
"outParameters":[
],
"inParameters":[
],
"body":[
{
"type":"exprStmt",
"tokens":[
{
"type":"operator",
"data":"("
},
{
"type":"operator",
"data":"5"
},
{
"type":"operator",
"data":"/"
},
{
"type":"operator",
"data":"0"
},
{
"type":"operator",
"data":")"
},
{
"type":"propertyRef",
"data":"post to wall"
}
]
}
],
"isPrivate":false
}
]
}
Run Code Online (Sandbox Code Playgroud) procedural-programming static-analysis abstract-syntax-tree touchdevelop control-flow-graph
oop ×7
c ×2
php ×2
arguments ×1
c# ×1
freepascal ×1
function ×1
lazarus ×1
modeling ×1
paradigms ×1
pascal ×1
touchdevelop ×1
turbo-pascal ×1
uml ×1