Smalltalk语言是何物?面向对象鼻祖Simula的诞生?Simula和Smalltalk有什么区别?面向对象设计?
Smalltalk语言是何物?
Smalltalk语言的前身可以追溯到Flex系统,这是由Alan Kay最早提出的。在随后的发展中,Smalltalk逐渐演化,并出现了Smalltalk-72和Smalltalk-76等版本。最终,在经过近10年的研究与发展后,Xerox研究小组于1980年正式推出了Smalltalk-80系统。Smalltalk语言对后来的许多编程语言产生了深远影响,包括Objective-C、Java、Ruby等。这些语言都借鉴了Smalltalk的面向对象编程概念,如对象、类和消息传递等。因此,Smalltalk也被誉为“面向对象编程之母”。
面向对象鼻祖Simula的诞生
Simula 是一种早期的高级编程语言,它对后来的编程语言产生了深远的影响,特别是在面向对象编程(OOP)方面。Simula 的设计者是挪威计算机科学家奥利·约翰·达尔(Ole-Johan Dahl)和克里斯蒂安·诺尔·克里斯特(Kristen Nygaard),他们在1960年代中期开始设计这种语言。它们一开始在研究如何将仿真技术应用于计算机程序,他们意识到现有的编程语言,如 FORTRAN 和 ALGOL,并不适合于模拟复杂系统。1966年,Simula I 语言发布,1967年,Simula 67 版本发布,它是一个更加成熟和完整的语言。Simula 67 增加了更多的语言特性,如多继承和动态绑定,这些特性使得它更适合于模拟和仿真。Simula 67 也成为了第一个被广泛使用的面向对象编程语言,它的成功促进了后来的面向对象编程语言的发展,如 Smalltalk、C++ 和 Java。
Simula和Smalltalk有什么区别?
这两者都比C语言诞生还早,它们都是对面向对象编程语言研究的产物。Simula更静态,倡导编译期决定,因此C++和Simula更亲近,而Smalltalk更注重消息动态发送,不在乎编译期是否绑定,在此思想,ObjC和Smalltalk更接近。
面向对象设计
通常的认知,面向对象程序设计最早从Simula发展而来,而后的SmallTalk也为面向对象提供了参考。ObjC借用SmallTalk消息的概念,C++扩大发展了OOP技术,为Java/C#等语言提供了坚实的基础。还有其他语言,Module-2提出模块MODULE概念,可以封装子程序和数据结构,限制访问权限,Clu提出了里氏替换原则,也为OOP设计提供了思路。面向对象最基本的就是类设计。
面向对象思想
- 面向过程和面向对象思维
- 习惯C语言函数过程思维,第一次接触面向对象可能有很强的不适应感。感觉这个世界应该是按过程去执行,而不是new一个对象。事实上,面向对象并没有改变程序的本质,依然是函数过程代码执行,只不过要找一个宿主。数据和对数据操作的函数分离造成很大的不便,面向对象就为了解决这个问题。
- 面向对象类就是C语言的"结构体",将操作函数和花哨特性加进来,访问更方便,这就是面向对象的本质。
- 包含对于C语言main函数而言,简单直接,输出hello world即可。Java和C#必须新建一个类,类里面写Main函数。Java更甚,还要求至少一个类名是public,且和文件名相同,这造成了一些困扰。理解它需要了解,Java是为了规范化,用类让所有人都遵循,Main函数也不例外。这对于写测试代码,会产生冗余,这是语言的要求带来的"副作用"。C++比较圆滑,C语言虽然有时不够稳健,但main函数是C语言说的算,这让C++成为一门极其有特色的语言,你可能写的像C语言,也可以像Java,有的人写的四不像,高手写成一段经典,新手写得不能看。
- 不同访问权限
- 社会上有一些公共设施,大家都可以了解,去使用,这是public. 爸爸可能会希望房子继承给他的儿子,这是protected,房子目前爸爸和儿子都可以去住。爸爸为了自己的生活能继续,私自藏了200块,这是private. 请你最好的朋友来你家做客,他能在你家很随意,这是friend.
- 最早Smalltalk提出public/private概念。
- 多态
- 孩子高考填志愿,爸爸妈妈和老师都给了建议,但孩子坚持要听从内心的想法,这是多态。孩子父母落下一句话,一定要听他们的建议,这是不可重写的函数。
- 消息
- 一般而言,类函数并没有消息的概念,SmallTalk和ObjC强化了消息的概念,调用一个类对象的函数方法被称为发送消息,这个消息和GUI消息机制完全无关,它仅仅是函数调用的代名词。它们之所以这么称呼,源于有一套动态库,处理消息转发,即使目标对象根本不存在这个消息,编译依然不会报错。这在C++/Java/C#/Python是不能想象的。这有一个优点,可以模块化,主模块可以不用知道被调用模块是否存在,只管去调用,不管有还是没有,最终做对应处理即可。这简化了某些时候的处理。
支持面向对象设计OOP的语言
- 面向对象设计相比面向过程有不少优点,一些很老的编程语言也在新标准中纷纷加入。比如Fortran/Ada等。
- ObjC/C++/Java/C#/Python/JS 均支持面向对象设计。
- Go语言作者之一原本参与C语言设计,不太喜欢C++复杂的设计,用一套类似C语言结构体组合的方式模拟面向对象设计。Rust和Swift也是不太喜欢纯面向对象设计,用trait和结构体组合模拟面向对象设计。
- JS正式引入类是ECMAScript 2015(也称ES6)版本,但本质上它并不是Java/C#这种纯面向对象类设计,而是基于原型的继承模式。
若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
相关文章:
Smalltalk语言是何物?面向对象鼻祖Simula的诞生?Simula和Smalltalk有什么区别?面向对象设计?
Smalltalk语言是何物? Smalltalk语言的前身可以追溯到Flex系统,这是由Alan Kay最早提出的。在随后的发展中,Smalltalk逐渐演化,并出现了Smalltalk-72和Smalltalk-76等版本。最终,在经过近10年的研究与发展后,Xerox研究…...
KVM/ARM——基于ARM虚拟化扩展的VMM
1. 前言 ARM架构为了支持虚拟化做了些扩展,称为虚拟化扩展(Virtualization Extensions)。原先为VT-x创建的KVM(Linux-based Kernel Virtual Machine)适配了ARM体系结构,引入了KVM/ARM (the Linux ARM hypervisor)。KVM/ARM没有在hypervisor中引入复杂的…...
Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher Windows系统中Docker可视化工具对比分析1. 工具概览2. Docker Desktop官网链接:主要优点:主要缺点:版本更新频率: 3. Portainer官网…...
【架构面试】二、消息队列和MySQL和Redis
MQ MQ消息中间件 问题引出与MQ作用 常见面试问题:面试官常针对项目中使用MQ技术的候选人提问,如如何确保消息不丢失,该问题可考察候选人技术能力。MQ应用场景及作用:以京东系统下单扣减京豆为例,MQ用于交易服和京豆服…...
算法【完全背包】
完全背包与01背包的区别仅在于每种商品可以选取无限次。时间复杂度O(物品数量 * 背包容量) 下面通过题目加深理解。 题目一 测试链接:疯狂的采药 - 洛谷 分析:这是一道完全背包的模板题。对于第i个物品的可能性展开也有两种,第一种是不取第…...
二叉树的遍历
有一个结点的二叉树。给出每个结点的两个子结点编号,建立一棵二叉树,如果是叶子结点,则输入 0 0。 建好树这棵二叉树之后,依次求出它的前序、中序、后序列遍历。 输入格式: 第一行一个整数n ,表示结点数。 之后n 行…...
1.31 实现五个线程的同步
1.使用互斥锁实现 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include &l…...
three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)
春节忙完一轮,总算可以继续来写博客了。希望在春节假期结束之前能多更新几篇。 这一篇会偏理论多一点。笔者本没打算在这一系列里面重点讲理论,所以像相机矩阵推导这种网上已经很多优质文章的内容,笔者就一笔带过。 然而关于负缩放…...
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
本文项目编号 T 165 ,文末自助获取源码 \color{red}{T165,文末自助获取源码} T165,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
《大数据时代“快刀”:Flink实时数据处理框架优势全解析》
在数字化浪潮中,数据呈爆发式增长,实时数据处理的重要性愈发凸显。从金融交易的实时风险监控,到电商平台的用户行为分析,各行业都急需能快速处理海量数据的工具。Flink作为一款开源的分布式流处理框架,在这一领域崭露头…...
antdesignvue统计数据源条数、计算某列合计值、小数计算不精确多了很多小数位
1.在</a-table>下方加如下代码 <div>数据总条数:{ {tableData.length}}       <template>A列合计:{ {sum}}</template> </div> 注:tableData为<a-tabl…...
02.05、链表求和
02.05、[中等] 链表求和 1、题目描述 给定两个用链表表示的整数,每个节点包含一个数位。 这些数位是反向存放的,也就是个位排在链表首部。 编写函数对这两个整数求和,并用链表形式返回结果。 2、解题思路 本题要求对两个链表表示的整数…...
dmfldr实战
dmfldr实战 本文使用达梦的快速装载工具,对测试表进行数据导入导出。 新建测试表 create table “BENCHMARK”.“TEST_FLDR” ( “uid” INTEGER identity(1, 1) not null , “name” VARCHAR(24), “begin_date” TIMESTAMP(0), “amount” DECIMAL(6, 2), prim…...
Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)
文章目录 Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)1. 副本的基本概念2. 副本同步和一致性2.1 AR(Assigned Replicas)2.2 ISR(In-Sync Replicas)2.3 OSR(Out-of-Sync Replicas…...
爬虫基础(二)Web网页的基本原理
一、网页的组成 网页由三部分构成:HTML、JavaScript、CSS。 (1)HTML HTML 相当于网页的骨架,它通过使用标签来定义网页内容的结构。 举个例子: 它把图片标签为img、把视频标签为video,然后组合到一个界面…...
外网访问禅道软件项目管理系统
禅道项目管理软件是一款国产的开源免费项目管理软件,专注于研发项目管理,旨在帮助企业或团队提高项目管理的效率和质量。 本文将详细的介绍如何在 Windows 系统电脑端下载运行禅道软件项目管理系统,并且结合路由侠内网穿透实现外网访问本地的…...
Python 梯度下降法(五):Adam Optimize
文章目录 Python 梯度下降法(五):Adam Optimize一、数学原理1.1 介绍1.2 符号说明1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码2.3 遇到的问题2.4 算法优化 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法(五&a…...
笔试-二进制
应用题 将符合区间[l,r]内的十进制整数转换为二进制表示,请问不包含“101”的整数个数是多少? 实现 l int(input("请输入下限l,其值大于等于1:")) r int(input("请输入上限r,其值大于等于l&#x…...
springboot 2.7.6 security mysql redis jwt配置例子
数据库结构用的是若依的数据库基本结构,ruoyi.vip。 总体参考了文章:https://blog.csdn.net/qq_45847507/article/details/126681110 本文章只包含不同的地方,相同的不再赘述。 1、创建spring工程,jdk1.8,maven。 pom.xml中依赖部…...
FreeRTOS从入门到精通 第十六章(任务通知)
参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、任务通知简介 1、概述 (1)任务通知顾名思义是用来通知任务的,任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。 (2&#…...
WSABuilds系统调用:Windows与Android内核交互机制解析
WSABuilds系统调用:Windows与Android内核交互机制解析 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root sol…...
Qwen3-VL-Reranker-8B应用场景:科研数据集图文代码混合检索
Qwen3-VL-Reranker-8B应用场景:科研数据集图文代码混合检索 1. 科研检索的痛点与解决方案 科研工作者在日常研究中经常面临这样的困境:手头有大量包含文本、图像、代码片段的研究资料,想要快速找到相关内容却异常困难。传统的文本检索工具只…...
白城腾讯广告服务商
在白城,有不少企业想借助腾讯广告拓展业务,这就离不开靠谱的腾讯广告服务商。今天就和大家聊聊白城腾讯广告服务商的那些事儿,长春中网互联技术在这一领域表现就相当不错。白城腾讯广告服务商现状行业报告显示,近几年白城地区对腾…...
音频标注:从原理到产业,AI听懂世界的“翻译官”
音频标注:从原理到产业,AI听懂世界的“翻译官” 引言 在人工智能的浪潮中,计算机视觉的“看”和自然语言处理的“读”已广为人知,而让机器学会“听”——理解并解析复杂的声音世界,正成为新的前沿。这一切的基石&…...
不止于搭建:用DVWA靶场在Kali上复现SQL注入与文件上传漏洞实战
不止于搭建:用DVWA靶场在Kali上复现SQL注入与文件上传漏洞实战 当你第一次在Kali Linux上成功运行DVWA靶场时,那种成就感就像解锁了新世界的大门。但真正的乐趣才刚刚开始——这个看似简单的靶场,其实是网络安全爱好者最好的实战训练场。本文…...
python-flask-djangol框架的婚恋相亲交友网站
目录技术选型与框架对比核心功能模块设计数据库模型示例(Django ORM)安全防护措施部署方案开发路线图项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与框架对比 Flask:轻量级框架&a…...
基于春联生成模型的Python爬虫数据采集与内容生成系统
基于春联生成模型的Python爬虫数据采集与内容生成系统 用技术传承文化,让AI助力创作 1. 项目背景与价值 春节是中国人最重要的传统节日,而春联则是春节文化中不可或缺的一部分。每年春节,家家户户都会贴上新的春联,表达对新年的美…...
从源码到上架:手把手教你用Android Studio打包绿豆TVBox APK,并修改Logo、启动图和包名
从零打造个性化TV应用:Android Studio深度定制指南 在流媒体内容消费爆发的时代,拥有一个专属的影视聚合平台成为许多技术爱好者的追求。绿豆TVBox这类开源项目为开发者提供了快速入门的跳板,但真正实现个性化部署需要跨越从源码编译到定制化…...
驾驭AI引用:Geo优化中的内容评分机制与实战策略深度解析
在生成式人工智能(Generative AI)日益主导信息获取与分发路径的时代,传统搜索引擎优化(SEO)的范式正被生成式引擎优化(Geo)所颠覆。Geo不再仅仅关注关键词排名,而是深入探究内容如何…...
告别B站评论区识人难题!这个免费工具让你一键掌握用户背景
告别B站评论区识人难题!这个免费工具让你一键掌握用户背景 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分,支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-checker …...
