标签: abstraction

抽象和多态之间有什么区别

我似乎不太了解两个OOP概念.你能解释什么是抽象多态,最好用真实的例子和代码吗?

谢谢.

oop polymorphism abstraction

31
推荐指数
6
解决办法
3万
查看次数

使用NoSQL API的ORM是多余的吗?

使用MongoDB(我假设其他NoSQL数据库API值得他们的盐)查询数据库的方式比SQL简单得多.没有繁琐的SQL查询可以生成等等.例如,从mongodb-csharp获取:

using MongoDB.Driver; 
Mongo db = new Mongo(); 
db.Connect(); //Connect to localhost on the default port. 
Document query = new Document(); 
query["field1"] = 10; 
Document result = db["tests"]["reads"].FindOne(query); 
db.Disconnect();
Run Code Online (Sandbox Code Playgroud)

ORM怎么能简化呢?在一个体面的NoSQL API之上是否需要ORM或其他"数据库抽象设备"?

c# orm abstraction mongodb nosql

31
推荐指数
1
解决办法
1万
查看次数

Clojure中序列和集合之间的区别是什么

我是一名Java程序员,也是Clojure的新手.从不同的地方,我看到序列和集合在不同的情况下使用.但是,我不知道他们之间究竟有什么区别.

举个例子:

1)在Clojure的序列文档中:

The Seq interface
(first coll)
  Returns the first item in the collection. 
  Calls seq on its argument. If coll is nil, returns nil.
(rest coll)
  Returns a sequence of the items after the first. Calls seq on its argument. 
  If there are no more items, returns a logical sequence for which seq returns nil.
(cons item seq)
  Returns a new seq where item is the first element and seq is the rest.
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在描述Seq接口时,前两个函数(first/rest)使用coll,这似乎表明这是一个集合,而 …

collections abstraction clojure

31
推荐指数
5
解决办法
5785
查看次数

28
推荐指数
3
解决办法
3万
查看次数

清洁代码:对象应该具有公共属性吗?

我正在阅读"清洁代码"这本书,并且正在努力解决这个问题.在讨论对象和数据结构时,它指出以下内容:

  • 对象将其数据隐藏在抽象之后,并公开对该数据进行操作的函数.
  • 数据结构公开其数据并且没有有意义的功能.

所以,我从中获得的是我不应该在我的对象上有任何公共属性,我应该只有对属性执行操作的方法.如果我确实需要访问属性,它们应该在数据结构上,可以从我对象上的方法返回?使用这种方法,似乎我需要为我的对象上的Height属性使用GetHeight()和SetHeight()方法,而不是仅使用属性的getset.

也许我不明白究竟是什么建议,但这是我对" 对象隐藏他们的数据 "的理解.如果你能帮助我理解这一点,我将非常感激!

提前致谢!

c# abstraction properties object data-structures

27
推荐指数
5
解决办法
2873
查看次数

抽象的私人功能

以下代码将使PHP不高兴,customMethod()是私有的.为什么会这样?可见性是由声明某事物而非定义的地方决定的吗?

如果我想使customMethod仅对Template类中的样板代码可见并防止它被覆盖,那么我是否会将其保护并最终?

的template.php:

abstract class Template() {
    abstract private function customMethod();

    public function commonMethod() {
        $this->customMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

CustomA.php:

class CustomA extends Template {
    private function customMethod() {
       blah...
    }
}
Run Code Online (Sandbox Code Playgroud)

Main.php

...
$object = new CustomA();
$object->commonMethod();
..
Run Code Online (Sandbox Code Playgroud)

php inheritance abstraction

27
推荐指数
2
解决办法
2万
查看次数

什么是复杂动画的良好抽象?

您如何设计和实现复杂的UI交互动画?

(我不是在讨论像jQuery或UIKit这样的特定语言和库,除非它们强迫你以特定的方式思考管理相互依赖的动画,我感兴趣.)

考虑一个看似"简单"的任务,比如设计和编程iOS主屏幕.

iOS主屏幕

然而,隐藏复杂性的程度令人震惊.
我注意到关于界面的一些事情:

  • 当您几乎没有触摸图标时,其不透明度会发生变化,但尺寸更改会延迟.
  • 如果您在其他两个应用之间拖动应用,则在重新排列所有应用以移动可用空间之前会有明显的延迟.因此,如果您只是在屏幕上移动应用程序,那么在您解决之前不会发生任何事情.
  • 重新排列是逐行进行的,首先是你盘旋的线,它会触发链中的下一行,直到前面的空闲空间.
  • 如果你删除一个应用程序,它将会在现在可用的空间中掉落,而不仅仅是丢弃它的位置.
  • 如果您将应用程序悬停在另一个应用程序上,则会出现径向光,闪烁两次,然后才会创建一个组.
  • 如果该组是在自由空间中创建的,然后被丢弃,则会在放弃时动画留下以占据自由空间.

我确信这里有更多的复杂性,我没有注意到.

连续动画与离散动作

在粗略的概括,为每一对(animation, user_action)在同一界面环境下,你需要决定是否有什么user_action情况发生,而animation已经运行.

在大多数情况下,你可以

  • 取消动画;
  • 随时改变动画;
  • 忽略行动;
  • 将动作排队到动画结束时.

但是在动画期间可能会有几个动作,你必须决定在动画结束时丢弃哪些动作,排队哪些动作,以及是否执行所有排队动作,或者只执行最后一个动作.

如果在动画完成时某些内容排队,并且动画发生了变化,则需要确定排队的操作是否仍然有意义,或者是否需要删除.

如果这听起来太理论化,请考虑一个现实世界的例子:你如何处理用户向下拖动应用程序,等待重新排列开始,然后立即向上拖动应用程序并释放它?如何确保动画在每种可能的情况下都流畅可靠?

适合工作的正确工具

我发现自己甚至无法保留一半可能的情景.随着UI的表现力增加,可能状态的数量开始猛烈地违反7±2规则.

因此,我的问题如下:

你如何控制设计和实现动画的复杂性?

我既想找到解决问题的有效方法,也想找到解决问题的方法.

作为一个例子,事件和观察者被证明是大多数UI的非常有效的抽象.
但是,您能否依靠事件作为主要抽象来设计和实现类似iOS的拖放式屏幕?

代码必须多么纠结才能准确地表示UI的所有可能状态?它是一个事件处理程序添加另一个事件处理程序当一些布尔变量对于将其设置为false的函数为真时,除非在它之前运行另一个事件处理程序吗?

"你有没有听说过课程?"你可能想知道.为什么,我有,但这些类需要分享的状态太多了.

总而言之,我正在寻找与语言无关(尽管可能是语言或框架启发的)技术,用于管理顺序或同时发生的复杂的相互依赖,可取消,动画,并描述它们如何对用户操作做出反应.

(所有这一切都考虑到我不需要自己编写动画 - 也就是说,我确实可以访问像jQuery或Core Animation这样的框架,animate(styles, callback)对我而言,我可以cancel做到这一点.)

数据结构,设计模式,DSL如果有助于解决这些问题,那么它们都很好.

language-agnostic user-interface animation abstraction design-patterns

27
推荐指数
1
解决办法
3192
查看次数

System.Web.Abstractions:它有什么用?

... 绝对没有?

它分别为ASP.NET WebFormsASP.NET MVC填充了哪些部分?

你能以某种方式创建一个使用System.Web.Abstractions的ASP.NET*基础应用程序,以便它可以在两种ASP.NET Web应用程序中使用吗?

在这种情况下,他们是如何将System.Web.Abstractions中的类重新调整回ASP.NET WebForms的呢?

你不能从命名空间中新建对象,所以它不能用于模拟,可以吗?

更新:很抱歉没有明确我知道测试HttpContext和其他构建ASP.NET对象的问题.但无论如何,谢谢你的好解释.

.net asp.net asp.net-mvc abstraction

26
推荐指数
2
解决办法
1万
查看次数

是HttpContextWrapper所有......有用吗?

我一直在完成清理控制器代码的过程,以使每个操作都可测试.一般来说,这并不是太困难 - 我们有机会使用固定对象,比如说FormsAuthentication,我们通常会在适当的时候引入某种形式的包装器并且是我们喜欢的方式.

由于没有特别与此对话密切相关的原因,在处理HttpContext的使用时,我们决定使用新创建的HttpContextWrapper类而不是发明自己开发的东西.我们介绍的一件事是能够交换HttpContextWrapper(比如说,用于单元测试).这完全受到Oren Eini使用DateTimes处理单元测试的方式的启发(参见文章,我们也使用的模式)

public static class FooHttpContext
{
    public static Func<HttpContextWrapper> Current = () 
         => new HttpContextWrapper(HttpContext.Current);

    public static void Reset()
    {
        Current = () => new HttpContextWrapper(HttpContext.Current);
    }
}
Run Code Online (Sandbox Code Playgroud)

没什么特别的花哨.它在我们的控制器代码中运行得很好.当我们去编写单元测试时,就会出现这个问题.我们使用Moq作为我们的模拟框架,但是唉

var context = new Mock<HttpContextWrapper>() 
Run Code Online (Sandbox Code Playgroud)

因为HttpContextWrapper没有无参数的ctor,所以会中断.作为ctor参数需要什么?一个HttpContext对象.所以我发现自己陷入困境22.

我正在使用规定的方法来解耦HttpContext - 但我无法模拟一个值,因为原始的HttpContext对象是密封的,因此很难测试.我可以映射HttpContextBase,它们都来自 - 但这并没有真正让我得到我想要的东西.我是否只是忽略了HttpContextWrapper的某个方面?

编辑以澄清意图

我们找到了解决问题的方法 - 但我想我们最终要解决的问题是HttpContextWrapper给表带来了什么价值?我不怀疑某个人完全有一个哈哈!它的时刻,但它不会来找我.我在这里看到的大多数帖子都在可测试性方面进行了讨论 - 但是我自己的经验让我相信它并没有带来太大的影响.除非我们做错了.(完全可能).

c# abstraction mocking

26
推荐指数
2
解决办法
1万
查看次数

为什么抽象方法不能同步?

我正在从CodeRanch读取一个线程,说抽象方法无法同步,因为抽象类无法实例化,这意味着没有锁定对象.

这没有意义,因为抽象类是子类的定义(契约).对于同步方法的抽象定义不需要锁定,而子进程则需要.所有抽象标题都表明孩子必须同步这个方法.我的逻辑是否正确?如果没有,有人可以解释为什么我错了吗?

java inheritance multithreading abstraction synchronized

26
推荐指数
2
解决办法
1万
查看次数