F#奇妙游(16):基于对象和面向对象

面向对象编程掉书袋

Object-oriented programming (OOP) is a programming paradigm that uses abstraction to create models based on the real world. It uses several techniques from previously established paradigms, including modularity, polymorphism, and encapsulation. Today, many popular programming languages (such as Java, JavaScript, C#, C++, Python, PHP, Ruby and Objective-C) support OOP.

面向对象编程(OOP)是一种使用抽象创建基于现实世界的模型的编程范例。它使用了以前建立的范例中的几种技术,包括模块化、多态和封装。今天,许多流行的编程语言(如Java、JavaScript、C#、C++、Python、PHP、Ruby和Objective-C)都支持OOP。

Object-oriented programming (OOP) is a programming paradigm based on the concept of “objects”, which can contain data, in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods). A feature of objects is that an object’s procedures can access and often modify the data fields of the object with which they are associated (objects have a notion of “this” or “self”). In OOP, computer programs are designed by making them out of objects that interact with one another. OOP languages are diverse, but the most popular ones are class-based, meaning that objects are instances of classes, which also determine their types.

OOP编程范式基于“对象”的概念,对象可以包含数据(以字段的形式,通常称为属性或属性)和代码(以过程的形式,通常称为方法)。对象的一个特征是,对象的过程可以访问并经常修改它们所关联的对象的数据字段(对象具有“this”或“self”的概念)。在OOP中,计算机程序是通过使它们相互交互的对象来设计的。OOP语言是多样化的,但最流行的是基于类的,这意味着对象是类的实例,类也决定了它们的类型。

在翻译和抄书之后,我们来看看面向对象编程对于F#来说意味着什么。

基于对象的编程

我一直倾向于把编程分为两类。

一类是应用程序员,实际上不是什么程序员,我就是典型这类程序员,我们不产生库,我们只是库的搬运工。我们所运用的面向对象编程技术,实际上是基于对象的编程(Object-based programming,OBP)。OBP也有几个层级。

  1. 我们创建一些对象,设置对象的状态,调用对象的方法,获得对象的输出,问题解决;
  2. 我们创建一些对象,把他们组合在一起,把各个对象的状态设定为特定状态,让对象们相互交换信息,最终获得我们想要的输出,问题解决;
  3. 我们创建一些对象,但是通过继承和多态,略微修改对象的行为,使之更加符合我们需要解决的问题,获得我们想要的结果,问题解决。

这种调用库、组合库和补充库的三大手段,就是OBP的全部内容。也是很多人(包括我)获得工资的全部内容。

说真的,我们这种搬库工,实际上比CRUD还是要难一点的……

要完成基于对象的编程,我们实际上需要解决面向对象编程的三个问题。

  1. 创建;
  2. 组合;
  3. 继承与多态。

与更加高端的程序员不同,我们需要掌握的不是这些技术的实现细节,而是需要掌握这些技术的外在表现。而要实现好用、可靠的对象库,则需要更加高端的程序员——API程序员,真正掌握面向对象编程的高端人员。

面向对象的编程

真正高端的面向对象程序员的工作主要有两个方面:

  1. 设计对象体系结构;
  2. 实现便于调用的API。

这两个问题,第一个问题与问题域非常相关,也是一般情况下高端C++程序员总是在很小的范围内工作,因为领域专家很贵,领域知识很难获得,大部分需要很强的资金支持和长期的实践机会。

这是面向对象编程的一个核心内容,识别领域中的对象,构建领域对象的抽象观念模型,充分考虑领域可能产生的变化。准确的说是要把领域中的固定结构和变动分离开,并设计可靠的拓扑结构来容纳变动。

变与不变,是面向对象编程中领域分析的核心问题。

第二个问题就是具体编程技术,就是那些我完全学不会的、用于支持面向对象库的API设计技术。我既然没学会,那就没啥好说的……

让大佬们操心这个问题吧,等自己够厉害了才去搞这个问题。所以我的观点就是,对比较普通的面向工资编程的程序员而言:1)别搞什么设计设计模式;2)别搞什么面向对象编程;3)别搞什么API设计。

当然,生计问题解决的情况下、视自己的天分而定搞点更高端的那是必须的。但是这部分人会来看我们知乎吗……我很怀疑……

F#中的基于对象编程

F#对于.NET体系中的对象技术有完全的支持。F#中的对象,可以直接使用C#中的对象,也可以直接被C#中的对象使用。简直是完美。就好比Kotlin与Java,这两者的对象模型是完全兼容的。而Clojure、Scala与Java的对象模型兼容性就不是那么完美。

创建对象

F#中创建对象的语法是这样的:

let obj = new ClassName()

有些时候,我们需要给对象的构造函数传递参数,这时候就需要使用下面的语法:

let obj = new ClassName(param1, param2)

另外,如果对象定义了属性(Property),我们可以使用下面的语法来在创建对象是设置属性:

let obj = new ClassName(prop1 = value1, prop2 = value2)

调用对象的方法

F#中调用对象的方法,使用的是和C#一样的语法:

obj.MethodName(param1, param2)

访问对象的属性

F#中访问对象的属性,使用的是和C#一样的语法:

obj.PropertyName

继承与多态

F#中的继承与多态,语义上跟.NET体系中完全一样,语法上有一点点甜:

type DerivedClass() =
    inherit BaseClass()
    override this.MethodName(param1, param2) =
        // do something

接口

F#中的接口,语义上跟.NET体系中完全一样,语法上有一点点甜:

type DerivedClass() = 
    interface IInterfaceName with
        member this.MethodName(param1, param2) =
            // do something

扩展对象

除了上述标准的基于对象的技术,F#还提供了扩展对象的语法糖。

type ClassName with
    member this.MethodName(param1, param2) =
        // do something
    member this.PropertyName 
        with get() = // do something
        and set(value) = // do something

相当甜。

总结

  1. 面向对象编程有两个层次,基于对象编程和面向对象编程;
  2. F#完美支持.NET体系中的基于对象编程技术。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
校园短期闲置资源置换平台是一种创新的在线服务系统,旨在促进校园内学生、教职工以及其他成员之间的资源共享和有效利用。通过这个平台,用户可以发布、查找并交换他们暂时不使用的资源,从而实现资源的最大化利用,减少浪费,并促进校园内的可持续生活方式。以下是该平台可能包含的一些关键特性: 1. **用户注册和认证**:用户需要通过校园身份验证进行注册,确保平台的使用者都是校园社区的成员。 2. **资源发布**:用户可以发布他们愿意短期出借或交换的资源,如书籍、运动器材、电子产品、家具等。 3. **资源搜索和筛选**:用户可以根据资源类型、状态、可用时间等条件搜索和筛选所需的资源。 4. **在线预订系统**:用户可以通过平台预订所需的资源,并约定取用和归还的时间和地点。 5. **评价和信誉系统**:用户可以对交易的对方进行评价,建立信誉体系,增加用户间的信任。 6. **即时通讯功能**:平台内置即时通讯工具,方便用户就资源交换的细节进行沟通。 7. **安全和隐私保护**:确保用户的个人信息和交易记录的安全,保护用户的隐私。 8. **移动应用支持**:开发移动应用程序,使用户能够随时随地访问平台,进行资源的发布和搜索。 9. **教育资源置换**:特别为教师和研究人员提供教育资源的置换服务,如实验材料、研究工具等。 10. **活动和研讨会空间**:平台还可以用于发布和预订校园内临时活动或研讨会所需的空间。 11. **环保意识提升**:通过平台的推广和使用,增强校园社区成员的环保意识和资源节约意识。 12. **数据分析和报告**:平台可以收集和分析资源使用数据,为校园管理层提供资源利用和需求的洞察,以优化资源配置。 校园短期闲置资源置换平台通过提供一个便捷、高效和安全的在线环境,鼓励校园成员参与资源共享,不仅能够促进资源的合理分配和循环利用,还能增强社区的凝聚力和互助精神。随着共享经济理念的普及,这样的平台在校园中的推广和应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大福是小强

除非你钱多烧得慌……

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值