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&#…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
