抽象是一个似乎难以解释的概念,而不回复使用编程术语.我已经考虑了很多,但我无法得出满意的答案.有没有人有任何非常一般但非常相关的解释?
隐喻,similes等都是受欢迎的.
例:
迭代器是纯粹的抽象:任何行为类似于迭代器的东西都是迭代器.
这是什么意思?
在今天的编程中你看到的最糟糕的(由于流行程度或严重程度)抽象反转的例子是什么?
对于那些不熟悉这个概念的人来说,抽象反转是在高级构造之上实现低级构造.更确切地说,假设你有构造A和B.B是在A之上实现的,但A不会在任何地方暴露.因此,如果你真的需要较低级别的构造A,那么当B首先用A实现时,你最终会在B之上实现A. 见http://en.wikipedia.org/wiki/Abstraction_inversion.
最近,我一直在阅读有关接口是抽象的错误概念的帖子.其中一篇文章是http://blog.ploeh.dk/2010/12/02/InterfacesAreNotAbstractions.aspx
我有点困惑.如果我没有接口(接口/抽象类),那么我将如何注入我的依赖项并模拟它们?
另外,我听过人们谈论不使用只有一个实现者的接口.像这样的博客在这里- http://simpleprogrammer.com/2010/11/02/back-to-basics-what-is-an-interface/
现在所有这一切,它是否违反了原则 - 程序到接口而不是实现?
我发现自己经常按照模式编写代码:
foo xs = map snd $ filter ((< 10).fst) $ zip xs [0..]
bar ys = map snd $ sortBy (compare `on` fst) $ zip ys [0..]
Run Code Online (Sandbox Code Playgroud)
现在我想抽象出来
foo = indexesOf (filter (<10))
bar = indexesOf sort
indexesOf :: ([a] -> [a]) -> [a] -> [Int]
indexesOf f xs = map snd $ magick $ zip xs [0..] where
magick = undefined
Run Code Online (Sandbox Code Playgroud)
怎么magick办?
我想在我的应用程序中使用Parse(parse.com).Parse使用PFObject模型.我想在我的代码中使用我自己的模型(因此它不依赖于解析).如果可能的话,我想设计我的应用程序,以便我可以尽可能无缝地用另一个云服务替换解析.
这是一个好主意吗?抽象模型存储的最佳方法是什么,以便我的应用程序中没有(或最小)Parse代码的痕迹?
也许使用适配器设计模式将解析对象映射到我自己的对象?这应该是一个独立的类还是模型逻辑的一部分?
如果有人尝试过这样的话,我想听听你的想法.我应该直接在我的代码中使用解析模型吗?或者也许是单件工厂根据解析对象生成我的模型?
任何提示/想法/评论?
我正在制作一个基类,以便所有孩子的绑定都将设置在基类中
我已经做到了这一点
abstract class BaseActivity2<B : ViewBinding?, T : BaseViewModel?> : AppCompatActivity() {
private var viewBinding: B? = null
private var baseViewModel: T? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法在 oncreat() 中绑定视图,通常我们将视图绑定中的布局绑定为
binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root)
Run Code Online (Sandbox Code Playgroud)
但我正在寻找基本活动的通用方式
假设我有1个完整的类,其中包含约20种提供不同功能的方法。
现在,我们有多个使用此类的客户端,但我们希望它们具有受限的访问权限。
例如-
客户端1-可以访问method1 / m3 / m5 / m7 / m9 / m11
客户端2-可以访问method2 / m4 / m6 / m8 / m10 / m12
有什么办法可以限制此访问权限?
我认为的一种解决方案:
创建2个扩展父类的新类,并覆盖无法访问的方法,并从中抛出Exception。但是,如果第3个客户端有不同的要求,我们必须为其创建新的子类。
还有其他方法吗?
abstraction ×10
c++ ×2
oop ×2
android ×1
haskell ×1
inheritance ×1
interface ×1
ios ×1
java ×1
model ×1
parsing ×1
performance ×1