这是简短的版本.首要的是:我希望我的班级不变.我知道一堂课既不是抽象的,也不是最终的.我要问的是:有没有办法只允许内部类扩展和实现外部的抽象类?这可能不是实现我不可改变的目标的最佳方法,所以如果有人有更好的设计,我很乐意听到它.
我正在为矢量运算编写一个类 - 如物理和工程,而不是编程意义.(我也知道JScience有这个东西的包.我想写自己的,并保持简单.)
我喜欢Java几何包中使用的模式,其中,例如,a Line2D
可以使用两个精度级别之一创建:float或double.
public abstract class Line2D {
public static class Float extends Line2D { /* Implementation */ }
public static class Double extends Line2D { /* Implementation */ }
}
Run Code Online (Sandbox Code Playgroud)
这是我真的想在课堂上加入和扩展的功能,所以我创建了以下内容:
public abstract class Vector2D {
public final static class Integer extends Vector2D {
// Component length projected along x/y axis, respectively
final private int i, j;
public Integer( int i, int j ) {
this.i = …
Run Code Online (Sandbox Code Playgroud) 似乎每次我编写任何处理提取,推送,读取或写入操作的代码时,整个代码段都是临时的,丑陋的,并且在该确切应用程序的上下文之外完全无法使用.更糟糕的是,每当我设计这些东西时,我都必须重新发明轮子.在我看来,I/O操作的本质是非常线性的,并不适合模块化或面向对象的模式.
我真的希望有人能告诉我这里错了.是否存在面向对象或模块化文件和数据I/O的技术/模式?我可以遵循一些约定来添加一些代码重用性吗?我知道存在各种工具来简化单个文件的读取,比如XML解析器等,但我指的是使用这些工具的较大设计.
问题不仅限于单一语言; 我在Java,C,Matlab,Python和其他人中遇到过同样的问题.
这个问题的子主题是关于什么对象应该调用保存的问题.这个问题似乎是指工厂模式,其中文件的内容被构建,然后最终写入磁盘.我的问题是关于整体架构,包括用于写操作的工厂,还有用于读取/获取操作的(Insert Pattern Here).
我能想到的最好的东西是外立面图案......但圣洁的烟雾是那些丑陋的立面的代码.
有人请告诉我一个模式,我可以重新使用我的一些代码,或者至少遵循一个模板用于将来的读写.
有人在这里询问模块化设计,但答案是针对该提问者的问题,并不是完全有用的.
这只是一个例子,它基于我去年做的一个项目.随意提供一个不同的例子.
我们的程序是一个物理沙箱.我们想要加载描述该沙箱中对象的物理属性的XML数据.我们还需要加载包含3D渲染信息的.3DS文件.最后,我们需要查询SQL数据库以找出谁拥有哪些对象.
我们还需要能够支持3D模型格式.我们还不知道那些文件会是什么样子,但我们希望提前设置代码框架.这样,一旦我们获得新的数据模式,就可以快速实现加载例程.
来自所有3个来源的数据将用于在我们的软件中创建对象的实例.
之后,我们需要将物理信息(如位置和速度)保存到数据库,并将自定义纹理信息保存到本地文件.我们不知道纹理的文件类型是什么,所以我们只想布置代码结构,以便我们以后可以输入保存代码.
如果没有某种设计模式,即使是少量的对象也会迅速导致紧密耦合的网络.
外观可以将对象/数据与相应的文件分离,但所有这一切都将问题集中在输入和输出外观中,这可能会在匆忙中变成一场噩梦般的混乱.此外,对象/数据现在与立面紧密耦合,因此实际上没有获得模块化.
以前,我提出了一堆伪问题来解决我第一次提出这个问题时遇到的问题,但我已经决定它混淆了我的主要问题.我只想说:我必须在这个特定的读取操作集中使用大约2000行真正不稳定的代码,它在处理和组织方面做得非常少,而且我再也无法在另一个项目上使用它了.
我想避免将来编写这样的代码.
序言:我在写这篇文章的过程中找到了一个解决方案,这个问题是一个PITA并且有一个复杂的解决方案.因此,我觉得有必要离开这里帮助任何有这个问题的穷人.
我是MatLab的新手,我通常也不使用Visual C++,所以请原谅我,如果这应该是非常明显的.
简短版本:我的计算机上安装了Visual C++ 2013,但mex在运行时找不到它mex -setup c++
.我得到以下内容:
>>mex -setup cxx
使用mex时出错
未找到支持的编译器或SDK.您可以安装免费的MinGW-w64 C/C++编译器; 请参阅安装MinGW-w64编译器.有关更多选项,请 访问http://www.mathworks.com/support/compilers/R2015b/win64.html.
这是完整的情况.
我最初运行Visual Studio 2015,而mex发现编译器就好了.但是,我很快发现Simulink与VS 2015不兼容,所以我不得不回滚到VS 2013,这就是我的问题开始的时候.
我和其他许多人一起试过以下网站来寻找解决方案:
mex
用法.然后我走了一个兔子洞.
一个非常旷日持久的mathworks.com回答,提示其他链接.这导致我......
另一个mathworks.com回答听起来像我的问题,并建议修补我的设置.事实证明我没有安装SDK 7.1.所以,我去安装,并得到这个错误:
某些组件无法安装.某些Windows SDK组件需要RTM .NET Framework 4 ...
这个Stack Overflow问题询问了这个问题,我遇到了与DaniloGadêlha已经安装的.NET Framework 相同的问题.
我尝试了最佳答案,并删除了我能找到的任何版本的.NET框架的每一个引用,包括"Windows功能"下的那些,我仍然无法安装.
我尝试了下一个选项,即使在安全模式下,RegEdit也不会让我更改下一个答案建议的值,所以这是一个破产.
最后,我尝试了MandM的解决方案,最终解决了我的问题链.
我是航空航天工程和EECS学生.我正处于大量数学和物理学的工作,但尚未进入算法或汇编语言.
我设计和编写了各种各样的程序,从商业建议软件到卫星硬件控制器.
这项工作大部分涉及在其他媒介中进行数学运算,然后编写代码来实现它.
在将它们放入代码之前,我代数地简化了这些方程式.但是在我花时间这么做之前,我想知道我是否应该支持更多的加法运算,或者更多的乘法运算.(我已经知道分工的成本要高得多.)
这是我从其他一些工作中得出的等式,这是我所看到的非常典型的.
我们可以清楚地看到,至少有一些方法可以简化这个等式.由于简化是我的决定,我想挑选尽可能多的有利于性能的选项实用.我不打算以算法设计时为代价获得前沿性能.
一般来说,哪种双重操作更快:加法或乘法?
我知道知道哪个更快的唯一明确方法是编写和运行基准测试,但这不是重点.对于每次我需要简化方程式时编写测试代码的合理性,这不是一个足够高的优先级.我需要的是一个适用于我的代数的经验法则.
如果差异是如此微小,以至于边界可忽略不计或不确定,这是一个可以接受的答案,只要我知道它几乎没有区别.
我知道,在C和C++中,优化器会处理代数,因此它是一个空问题.但是,据我所知,Java编译器不进行代数简化/优化.具体来说,这个答案表明情况就是这样,程序员应该进行这种优化.
互联网上存在分散的答案,但我无法得出确凿的答案.一位前马里兰大学物理系的学生在Java上运行这些测试,但表中没有双重性能数据,图表比例使结果难以辨认.这个魁北克大学CS教授的测试只揭示了整数运算的结果.这个SO答案解释说,在硬件层面上,乘法是一个更复杂的操作,但我也意识到工程师在设计处理器时要记住这些事情.
其他有用的链接:
我正在运行安装了CDT的Eclipse 3.7.2.Ubuntu 12.04 LTS.
我有一个现有的makefile C++项目,我试图从Geany导入.我可以$ make
在项目的根目录中运行,并且所有内容都按预期构建.
我在Eclipse中的错误:
make:***没有规则让目标"全部".停止.
我的问题:如何消除此错误?
以下是我正在采取的确切步骤:
Eclipse CDT:没有规则使目标全部接近回答我正在尝试纠正的问题,但我有与OP相同的问题:生成makefile自动不可用.
我已经尝试过制作:***没有规则可以制作目标"全部".停止.Eclipse错误的最高评级解决方案.但是,当我取消选中Build(Incremental Build)选项时,build完全没有任何功能,所以这也不对.
c++ ×2
java ×2
algorithm ×1
double ×1
eclipse-cdt ×1
immutability ×1
io ×1
makefile ×1
matlab ×1
mex ×1
modularity ×1
oop ×1
optimization ×1
performance ×1