惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Heimdal Security Blog
A
Arctic Wolf
K
Kaspersky official blog
V
Vulnerabilities – Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
L
LINUX DO - 热门话题
MongoDB | Blog
MongoDB | Blog
T
Threat Research - Cisco Blogs
D
Docker
爱范儿
爱范儿
T
Tenable Blog
C
Check Point Blog
B
Blog
C
Cisco Blogs
Vercel News
Vercel News
The Cloudflare Blog
T
Threatpost
NISL@THU
NISL@THU
T
Tor Project blog
V2EX - 技术
V2EX - 技术
P
Palo Alto Networks Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tailwind CSS Blog
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
SecWiki News
SecWiki News
博客园 - 司徒正美
S
Security @ Cisco Blogs
GbyAI
GbyAI
S
Secure Thoughts
Microsoft Security Blog
Microsoft Security Blog
The Register - Security
The Register - Security
Recorded Future
Recorded Future
Cloudbric
Cloudbric
Webroot Blog
Webroot Blog
N
News and Events Feed by Topic
Y
Y Combinator Blog
博客园_首页
T
Troy Hunt's Blog
The Hacker News
The Hacker News
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
U
Unit 42
AWS News Blog
AWS News Blog
PCI Perspectives
PCI Perspectives
V
Visual Studio Blog
博客园 - 聂微东
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
[译]柏拉图与面向对象编程
种瓜 · 2018-12-29 · via 夜行人

文章目录

他们(哲学家)的职业就是什么事也不做,但是要观察每一件事情;因此,他们常常能把相距遥远和极不相同的事物的力量连结在一起。 – 亚当·斯密《国富论》

前言

原文见Plato and Object Oriented Programming

译文

面向对象编程代表了一种范式转变,转变自传统的模块化编程方法。今天的计算机科学家无疑是聪明的人,但面向对象编程的基础概念已存在近2500年,它们来自柏拉图的’对话’。

柏拉图和软件架构师的思维方式似乎存在显着的相关性,即便他们年代相隔数千年。

古希腊哲学

柏拉图出生在古希腊的雅典城,受教于苏格拉底(苏格拉底被认为是西方哲学之父)。柏拉图是古希腊哲学家中(也许是所有哲学家中)最著名的一位。他通过丰富的著作遗产对现代哲学产生了深远的影响,这些著作包括35篇对话和13份书简。

柏拉图的著作涵盖众多哲学主题。在这些主题中,我们将他激进的形而上学概念,与面向对象编程做个比较。从根本上说,柏拉图的形式(Forms)论与面向对象编程OOP的基础概念相近。

形式论

纵观他的形而上学,柏拉图把形式(Forms)看作一种抽象表示,它是真实世界的物体/特征的模板(templates/patterns)。

举例来说,为了解释形式的概念,柏拉图讨论了的概念。一朵花是的,一幅画也可以说是的,但它们并不是本身。柏拉图认为,真正的的形式独立于拥有它的物体而存在,因此我们可能有一个完美的的概念,但永远无法亲身体验它。

按照柏拉图的说法,一朵花被称为分享的形式。它是美丽的,但我们从未见过真正的。这种花被认为是一个美的实例,从众多形式(其中一个就是)中继承特质。

形式是不变的,而一朵花可能在一段时间内拥有,但最终在它枯萎死亡时会失去它。作为抽象,形式独立于继承其品质的现实世界对象(或者实例)。

计算机编程

传统方法

计算机程序在本质上是有序的指令列表: 完成A,然后完成B等。这有点像跟着烹饪菜谱一步一步操作。

随着计算机越来越先进,相关软件程序也变得更加冗长和复杂。通常,计算机需要一次又一次地运行相同的代码。因此,不应每次需要时都重写这段代码,而是将函数(functions)或过程(procedures)写成半隔离的代码片段,需要时就调用它们。这有助于软件以模块化的方式开发,各个模块负责某些计算过程。

面向对象编程(OOP)

面向对象编程将模块带入了下个阶段,模块成为自包含的代码片段,它们被称作(classes).

一个(Class)是一堆程序代码,用做创建对象(object)的模版, 正如柏拉图的形式(Forms)是真实事物的抽象哲学模板(templates)。这段代码或不是对象(object)本身,而像柏拉图式的形式(Forms),只是描述对象实际是怎样的以及具有什么属性的模板(templates)。与柏拉图完全相同概念,转换到一个不同的学科,中间相隔了2500年!

与柏拉图的形式的分层系统相似,类或模板也可以被增强。通过创建扩展类,继承父类的所有属性,同时又可以添加它自己的额外属性。(译者注: 我认为柏拉图似乎没有想清楚不同形式之间的关系问题,他也没有阐述分层系统,对话中巴门尼德指出柏拉图形式的一些问题,柏拉图似乎没有重视。这点罗素在《西方哲学史》里有指出)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
:::text
 1: // Our template or perfect form of a chair
 2: class Chair
 3: {
 4: // bits of code to define the chair goes in here
 5: }
 6:
 7:
 8: // New template for a type of chair inheriting properties from the perfect chair form
 9: class OfficeChair extends Chair
 10: {
 11:     // bits of EXTRA code for the office chair goes in here 
 12: }
 13:
 14:
 15: // Create an actual object, or particular of the office chair
 16: $objMyOfficeChair = new OfficeChair();
 17:
 18: // Create an another object, or particular of the office chair
 19: $objMyOtherOfficeChair = new OfficeChair();

这是一个极其简化的例子,从中可以看到类之于对象 与 柏拉图形式之于实例的类比。

太阳底下无新事物

虽然我们可能认为自己是行走在这个星球上最聪明的一代,但我们可能得谦卑一些,通常我们只是在用新瓶装旧酒。

圣经 传道书1:9-10 里说:

已有的事, 后必再有, 已行的事, 后必再行, 日光之下并无新事。

艾萨克·牛顿向前人的灵感致敬道:

如果说我看得比别人更远些,那是因为我站在巨人的肩膀上。

寻求灵感

如果你正在努力思考问题的答案,或想找到一种新的做事方式,不如试着从经典中寻求灵感。

通过研究历史,即使是不同学科中的历史,也可能让你遇到一些想法,这些想法可以迁移到你目前的专业领域,并带着你前往梦寐以求的地方。这个过程甚至被赋予了名字 – 思想的交叉施肥。

下次你遇到问题时,会转向哪儿寻找灵感?柏拉图?亚里士多德?

译者注

在此列出巴门尼德指出的形式/理念所存在的问题,这些问题可能会以其他形式出现在面向对象编程中.

(1)个体是分享全部的理念呢,还仅仅是分享其一部分呢?无论是哪一种观点,都可以有反驳的理由。如果是前者,那么一个事物就必须同时存在于许多地方;如果是后者,则理念既然是不可分割的,那么一个具有“小”的一部分的事物就要比“绝对的小”更加小,而这是荒谬的。(2)当一个个体分享一个理念的时候,个体和理念就是同样的;所以就必须另有一个既包含这个个体又包含原来的理念的理念。于是就必须再有一个理念包括这个个体和这两个理念,如此类推从至无穷。这样,每一个理念就不止是一个,而会变成为理念的一个无穷系列。(这和亚里士多德关于“第三个人”的论证是同样的。)(3)苏格拉底提示说,理念也许仅仅是思想;但是巴门尼德指出,思想必须是关于某种事物的。(4)由于以上第(2)条所举的理由,所以理念便不能与分享它们的个体相似。(5)如果有任何理念存在的话,它也一定不能被我们所认识,因为我们的知识不是绝对的。(6)如果神的知识是绝对的,他就不能认识我们,因此也就不能统治我们。 –《西方哲学史》 第十五章 理念论