标签: abstraction

Smalltalk中的消息转发

所以我正在编写一个应用程序,其中一个对象具有一组转发消息的委托对象.这个想法是我可以说的

someObject sendMessage:aMessage
Run Code Online (Sandbox Code Playgroud)

并且aMessage将被发送给someObject的所有委托(对于aMessage的任何值).我能够做到这一点的唯一方法是:

sendMessage:aMessage

| sel chunks kwords arglist msg |
chunks := aMessage findTokens:' '.
kwords := Array new:(chunks size).
arglist := Array new:(chunks size).
1 to: (chunks size) do: [:i | 
    kwords at:i put:((chunks at:i) findTokens:':') at:1.
    arglist at:i put:((chunks at:i) findTokens:':') at:2].
sel := ''.
kwords do:[:word | sel := sel,word,':'].

msg := Message selector:sel arguments:arglist.
delegates do:[:del | del perform:msg selector with:msg arguments].
Run Code Online (Sandbox Code Playgroud)

它有效,但必须有更好的方法.这个解决方案将参数限制为字符串,并且只是简单的丑陋.有谁知道更清晰,更好的转发消息的方式?

顺便说一下,我正在使用吱吱声,但是首选的是独立于实现的解决方案;)

编辑:我应该补充说,委托与对象属于同一类,所以我不能只重写DoesNotUnderstand:.

oop abstraction smalltalk squeak

4
推荐指数
1
解决办法
911
查看次数

在抽象类的静态函数中创建新实例

abstract class db_table {

    static function get_all_rows() {
        ...
        while(...) {
            $rows[] = new self();
            ...
        }
        return $rows;
    }
}

class user extends db_table {

}

$rows = user::get_all_rows();
Run Code Online (Sandbox Code Playgroud)

我想从抽象父类中定义的静态方法创建类的实例,但PHP告诉我"致命错误:无法实例化抽象类......"我应该如何正确实现它?

编辑:当然我想在这种情况下创建类"user"的实例,而不是抽象类的实例.所以我要告诉它创建一个被调用的子类的实例.

php abstract-class abstraction instantiation

4
推荐指数
2
解决办法
4741
查看次数

州Monads:交换另一种模式?

所以我正在Haskell中编写一个游戏,我将玩家视为一系列与各种转弯阶段相关的状态改变函数.最初,这看起来像:

let game'  = phase1 game
    game'' = phase2 game'
-- etc.
Run Code Online (Sandbox Code Playgroud)

国家monadosity的主要候选人,对吧?这导致更优雅:

do
  phase1
  phase2
-- etc.
Run Code Online (Sandbox Code Playgroud)

然而,似乎我必须改变phase1,phase2等等以一个样板"状态获取"步骤开始:

phase1 = get >>= \game -> -- ...
Run Code Online (Sandbox Code Playgroud)

我希望有一种方法可以抽象出来,所以我可以避免调用者和被调用者都使用样板文件.我太新了,不知道这是什么方式(这是我的第一个真正的Haskell项目).有什么建议?

monads haskell abstraction boilerplate state-monad

4
推荐指数
1
解决办法
388
查看次数

是否有提供程序无关的方法来获取Spring框架中的最新缓存统计信息?

Spring提供了Cache Abstraction的一个有用功能

但我找不到的是提供者不可知的方式来获取实时缓存统计信息.基本上我只想在网页上或通过JMX显示所有缓存名称及其对应键的列表,其中包括命中,未命中和大小(以kb为单位).我知道ehcache确实提供了这个功能,如果我在代码中使用ehcache API,我可以得到它(过去已经使用过它).但我相信在代码中使用ehcache API会剥夺Spring框架缓存抽象的整个概念.

statistics spring caching abstraction

4
推荐指数
1
解决办法
430
查看次数

什么是rep-invariant和rep ok这个词是什么意思?

在谈论软件工程和抽象数据类型时,我听到了很多,这有什么作用?谁能给我一个这个概念的具体例子?

abstraction

4
推荐指数
1
解决办法
5934
查看次数

在java中实现抽象方法/类

我可以在java中的抽象基类A中实现抽象方法吗?

如果答案是肯定的,并且在基类A中存在实现的抽象方法,并且存在来自A的派生类B(B不是抽象的).B仍然必须实现该基本抽象方法吗?

java methods abstraction derived base

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

实用示例封装与信息隐藏与抽象与数据隐藏在Java中

我知道有很多关于这个问题的帖子,它有实时例子的理论解释.这些OOP术语非常简单,但对于像我这样的初学者来说更加困惑.但我期待这里不是一个定义和实时的例子但是期待java中的代码片段.

请问任何人都可以为Java中的每一个提供非常小的代码片段,这将有助于我理解封装与信息隐藏与抽象与数据隐藏的实际关系吗?

java oop abstraction information-hiding data-hiding

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

为什么我不限制在Python 3.4中实例化抽象类?

我编写了一个Python脚本,并且发现Python 3.4并不限制抽象类在Python 2.7.8的情况下被实例化.

这是我在名为的文件中的抽象类Shape.py.

from abc import ABCMeta, abstractmethod

class Shape:

    __metaclass__ = ABCMeta # Making the class abstract

    def __init__(self):
        pass:

    @abstractmethod
    def getArea(self):
        print("You shouldn't have called me.")
        return None
Run Code Online (Sandbox Code Playgroud)

现在我创建了另一个继承自abstract类的类Shape:
Filename:Circle.py

from Shape import Shape

class Circle(Shape):

    PI = 3.141

    def __init__(self, radius=0):
        self.radius = radius

    def getArea(self):    # Overriding it from Shape class
        return self.PI * self.radius ** 2
Run Code Online (Sandbox Code Playgroud)

现在在我的Main.py:

from Shape import Shape
from Circle import …
Run Code Online (Sandbox Code Playgroud)

python abstraction python-3.4

4
推荐指数
1
解决办法
432
查看次数

java中数据抽象和过程抽象的区别

我试图理解java中数据抽象和过程抽象之间的区别。

我理解过程抽象是利用接受形式参数的方法并向用户隐藏实现。这在语言中完全有意义PL/SQL,因为我可以选择在PL/SQL.

但我对数据抽象和过程抽象感到困惑,因为即使 Java 中的过程也是作为某个类的一部分实现的。每个类还可以有一些静态方法(public static),包中的每个其他类都可以使用它们。

请有人能明确区分这两者(就java而言)

java abstraction

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

抽象如何帮助隐藏 Java 中的实现细节?

抽象是隐藏实现细节并仅向用户显示功能的过程。

另一种方式,它只向用户显示重要的东西并隐藏内部细节。所以下面是一个创建抽象类并覆盖抽象方法的示例。但我不明白的是它是如何隐藏实现细节的?

abstract class Bank
{    
   abstract int getRateOfInterest();    
} 

class SBI extends Bank
{    
 int getRateOfInterest()
  {
   return 7;
   }    
  }

class PNB extends Bank  
{    
 int getRateOfInterest()
   { 
    return 8;
   }    
 }    

class TestBank{    
public static void main(String args[])
{    
 Bank b;   
 b=new SBI();  
 System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");    
 b=new PNB();  
 System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");    
 }
 }     
Run Code Online (Sandbox Code Playgroud)

java abstract-class abstraction

4
推荐指数
1
解决办法
4906
查看次数