Java/OOP中类型的基数分析
在Haskell、Purescript和Elm等语言中,将类型视为集合是非常强大的,如所述。此工具可帮助您选择最适合您的问题的数据结构。它还允许您分析有多少不可能的状态 有没有可能将这个想法转化为过程OOP语言,比如Java,来分析不可能状态是否是不可能的?如果是,那会是什么样子 编辑:类型的基数为我们提供了一个类型可以表示的可能值的数量。在FP中,良好的实践是根据数据对类型进行建模。通过计算基数,我们可以检查我们的程序是否可能表示无效数据。如果数据结构的基数高于它应该持有的可能数据/状态的数量,那么数据结构允许我们表示无效数据Java/OOP中类型的基数分析,java,oop,haskell,functional-programming,type-theory,Java,Oop,Haskell,Functional Programming,Type Theory,在Haskell、Purescript和Elm等语言中,将类型视为集合是非常强大的,如所述。此工具可帮助您选择最适合您的问题的数据结构。它还允许您分析有多少不可能的状态 有没有可能将这个想法转化为过程OOP语言,比如Java,来分析不可能状态是否是不可能的?如果是,那会是什么样子 编辑:类型的基数为我们提供了一个类型可以表示的可能值的数量。在FP中,良好的实践是根据数据对类型进行建模。通过计算基数,我们可以检查我们的程序是否可能表示无效数据。如果数据结构的基数高于它应该持有的可能数据/状态的数量
将此与OOP进行对比。在OOP中,我们不在类型之后建模,而是在包含表示真实世界的属性和方法的对象之后建模。在OOP中是否有类似的方法可以分析对象的可能实例数量,以检查该对象是否包含无效数据?我怀疑对象可能过于笼统,无法进行此类分析。您可以将这些概念转换为面向对象语言,如(我想)Java或C。有些概念有相当详细的翻译,但我会介绍其中的一些 产品类型正是你的常态。求和类型更复杂 考虑来自的
Height
类型。你可以用C#这样写:
public interface IHeight
{
T Match<T>(Func<int, T> inches, Func<float, T> meters);
}
public interface IHeightVisitor<T>
{
T VisitInches(int inches);
T VisitMeters(float meters);
}
您还需要另一个实现,Meters
类,但我将把它留作练习(提示:它看起来很像Inches
)
需要明确的是,像IHeight这样的接口应该是一个实现细节。然而,在这里,我用它来“展示我的作品”。您可能应该封装实现,这样就不会有人对实现该接口产生有趣的想法。以下是。就类型而言,类是一种产品类型(围绕产品的包装),组成类型是类的属性类型。然而,除非您大量使用枚举类型,否则基数对您没有多大帮助。像
int
和string
这样的内置类型具有无限的基数(无论如何,这是有效的;如果使用这种技术,知道int
的基数约为40亿将不会非常有用。)
public interface IHeightVisitor<T>
{
T VisitInches(int inches);
T VisitMeters(float meters);
}
public sealed class Inches : IHeight
{
private readonly int inches;
public Inches(int inches)
{
this.inches = inches;
}
public T Accept<T>(IHeightVisitor<T> visitor)
{
return visitor.VisitInches(inches);
}
}