继承、Lambda、Objective-C和Swift

news2024/10/5 5:24:39

继承

东风系列导弹是镇国神器。东风41不是突然就造出来的,之前有很多种东风xx导弹,每种导弹都有自己的独特之处,相同之处都具备导弹基本特点。很多工厂有量产磨具的生产线,盖房子就图纸,建筑设计建设都有参考,小到分子、原子,大到地球、星系、宇宙,似乎东西都是类似的,有的又有点不同。继承也是宇宙的本质,也是人类社会的本质,编程语言只不过发现了这个本质,程序员可以创造一个又一个相同、相似或差异甚远的实例,完成需求和功能。

单继承和多继承

狭义的多继承代表继承多个类,而非继承接口,一般提到多继承都是指狭义的多继承。大多编程语言为了简化多继承带来的复杂度,使用接口(interface)或特性(traits).

  • C++是为数不多支持多继承的编程语言。

  • Python也支持多继承,若未指定父类名称,访问父类相同方法名会按照继承父类的顺序依次搜素。

  • Java/C#只支持单继承,用接口实现"多继承"。

  • PHP 5.0引入接口,5.4引入traits.

多继承的困扰

  • 小明有时很困扰,自己的脾气很倔,妈妈说这像他爸,他爸说像他姥姥,大家都要面子,一家人吵的不可开交。

  • 有人说自己是朱元璋18代后代,列出长相哪里哪里像,大部分人无法分辨,因为继承太长了,溯源也找不到实证。

  • 近亲的后代更高概率产生基因缺陷,多继承同样会继承多个父类"不好"的地方,编程语言更倾向继承一个"优秀"类,继承后进一步优化子类,实现真正"优生"。

多继承策略

多继承产生一个很大的问题,继承自不同父类或父父类的相同函数以哪个为准。

  • C3线性化理论是计算机编程中用于在多继承时确定继承的方法顺序。

  • Python引入了Mix-in混入类实现更优雅的多重继承。

  • Vue同样也有Mix-in概念。

继承的访问权限

  • C++提供了private/protected/public三种继承方式,比较复杂。Java/C#/Python仅有(?)public继承,默认不需要显式指明。

  • Python默认会继承父类的属性和方法,但不能继承父类私有的属性和方法(以两个下划线开头)。

继承的形式

  • ObjC、C++和C#用冒号分隔子类和父类。

  • Java用extends关键字。

  • Python用括号将父类包起来,形如class Base(Derived).

Lambda

编程语言的Lambda起源于数学Lambda演算,这是一套用于研究函数定义、函数应用和递归的形式系统,由Alonzo Church和Stephen Cole Kleene在20世纪三十年代引入。

匿名函数

匿名函数是lambda的另外一种叫法,不用像普通函数定义一样,简洁方便,在一些非FP语言也有应用。Java 8/C++ 11/C#/Python均支持。

Objective-C

ObjC比较小众,在20世纪80年代早期由Brad Cox发明。源于早期在NeXT和苹果公司使用(内部),Mac市场占有率本身就不高,ObjC没有太多程序员。在移动互联网时代iPhone开发爆发,ObjC也开始火爆。真正了解ObjC的人会觉得它算是面向对象语言中比较易学且实用的一种,不像C++那么复杂,ObjC真正做到了够用即可。

ObjC是C的面向对象扩展

  • ObjC是C的超集,增加了面向对象设计,借鉴了SmallTalk消息机制,此机制允许动态判断某个对象是否有某个方法,不像C++类方法调用,编译时期就决定是否可调用。

  • 习惯了C代码风格,刚开始学ObjC消息机制, 几乎无一例外感到不解和困扰,如果连续使用超过半年以上,慢慢会习惯并感受到它消息机制的”优雅”, 虽然代码没有C简洁,但清晰易懂。

  • ObjC可以用GCC编译,早期苹果macOS和iOS均用GCC编译,后来转向Clang.

特别的语法

  • ObjC用@表示类定义和实现,起源于Smalltalk 中,使用 @ 符号来表示类和类定义的方法。

1.0和2.0

  • GNUStep只支持ObjC 1.0, 对2.0支持不完整。

Swift

苹果于2014年推出Swift, 一种更像脚本的语言,不失效率。既拥有C和ObjC的特性,又更加灵活有趣。Swift的设计目标是为了替代Objective-C,正在逐渐成为Mac和iOS主流开发语言。Swift推出了包括编程范式、函数式编程、闭包、泛型等一些列特性。

Swift历史

Swift的诞生不得不提Chris Lattner, 他是LLVM的主要发起人之一,当年苹果不满意GCC不买账苹果公司对GCC的”修改期望”, 一怒之下请他替换编译器后端为LLVM, 后面逐步到OS X10.9和 XCode 5将整个编译链从LLVM+GCC转变成LLVM+Clang.


若文章对您有帮助,欢迎关注。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KVM虚拟化技术介绍

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 虚拟化技术是云计算的基础,什么是虚拟化?虚拟化技术的本质是什么?主流的虚拟化技术有哪些?本章将为您揭晓 一.虚拟化概述 虚拟化是一种将计…

【有啥问啥】领域自适应(Domain Adaptation, DA)详解

领域自适应(Domain Adaptation, DA)详解 引言 在机器学习和深度学习的广泛应用中,一个核心挑战在于模型往往在一个特定数据集(源领域)上训练后,难以直接应用于另一个不同但相关的数据集(目标领…

通信工程学习:什么是ICMP因特网控制报文协议

ICMP:因特网控制报文协议 ICMP(Internet Control Message Protocol,因特网控制报文协议)是TCP/IP协议簇中的一个重要子协议,主要用于在IP主机和路由器之间传递控制消息。以下是关于ICMP协议的详细解释: 一…

Pikachu-Unsafe FileUpload-客户端check

上传图片,点击查看页面的源码, 可以看到页面的文件名校验是放在前端的;而且也没有发起网络请求; 所以,可以通过直接修改前端代码,删除 checkFileExt(this.value) 这部分; 又或者先把文件名改成…

九、2 USART串口外设

1、STM32内部的USART外设的介绍 (1) STM32的USART的同步模式只是多了个时钟输出,只支持时钟输出,不支持时钟输入。该同步模式更多是为了兼容别的协议或者特殊用途而设计的,并不支持两个USART之间进行同步通信&#xf…

剖解最小栈

最小栈 思路: 1. 首先实例化两个栈,分别是stack用于存放数据,minstack用于存放最小值 2. 将第一个元素压入两个栈中,判断此时若minStack栈中为空,则表示压入的为第一个数据 if ( minStack.empty () ) { minStack.pus…

MySQL 查询优化器

文章目录 控制查询计划optimizer_prune_leveloptimizer_search_depth 优化器参数优化器提示索引提示成本模型server_costcost_name engine_cost 控制查询计划 https://dev.mysql.com/doc/refman/8.4/en/controlling-query-plan-evaluation.html 在执行SQL前会根据优化器选择执…

Leetcode 第 140 场双周赛题解

Leetcode 第 140 场双周赛题解 Leetcode 第 140 场双周赛题解题目1:3300. 替换为数位和以后的最小元素思路代码复杂度分析 题目2:3301. 高度互不相同的最大塔高和思路代码复杂度分析 题目3:3302. 字典序最小的合法序列思路代码复杂度分析 题目…

入手一个小扒菜fqrr#com

fqrr#com 既带q又带r是很多人不喜的类型, 父亲 夫妻 番茄 分期 人人 日日 好无聊的米呀,竟然组合不出来意思 这个不是购买的,别人说他1150元购买的,算是半抵给我的吧 其实我也不喜欢,我4声母.com 已经够多了&am…

【教程】文字转语音的3个方法,文字转语音使用攻略

文字转语音的需求还是蛮多的,很多用户在视频剪辑中会遇到。不想用本人的声音,那么视频中的旁白就只能通过文字转语音软件实现了。 想要将文字转为语音那还是蛮好解决的,如果你还在找方法,那么以下内容可以了解下。本文整理了三种简…

2c 操作符详解

1. 操作符分类: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 1除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。对于 / 操作…

NVIDIA NVLink-C2C

NVIDIA NVLink-C2C 文章目录 前言一、介绍1. 用于定制芯片集成的超快芯片互连技术2. 构建半定制芯片设计3. 使用 NVLink-C2C 技术的产品 二、NVLink-C2C 技术优势1. 高带宽2. 低延迟3. 低功率和高密度4. 行业标准协议 前言 将 NVLink 扩展至芯片级集成 一、介绍 1. 用于定制芯…

Candance仿真二阶米勒补偿OTA

1.OTA电路搭建目标——25Mhz GBW,65dB的增益 2.电路参照 3.candance电路搭建 实现步骤:应该是从下面这个公式开始推导 然后那个CL就是两边的那个CCa或CCb的大小 算出来就是gm75us

MongoDB-aggregate流式计算:带条件的关联查询使用案例分析

在数据库的查询中,是一定会遇到表关联查询的。当两张大表关联时,时常会遇到性能和资源问题。这篇文章就是用一个例子来分享MongoDB带条件的关联查询发挥的作用。 假设工作环境中有两张MongoDB集合:SC_DATA(学生基本信息集合&…

基于微信小程序的旅游拼团系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Colorize: 0 variables Colorize is not activated for this file. VsCode

问题情况 解决步骤 1.找到setting.json文件 2.输入以下代码,保存setting.json文件 "colorize.languages": ["css", "javascript", "sass", "less", "postcss", "stylus", "xml"…

基于SpringBoot+Vue+MySQL的中医院问诊系统

系统展示 用户前台界面 管理员后台界面 医生后台界面 系统背景 随着信息技术的迅猛发展和医疗服务需求的不断增加,传统的中医院问诊流程已经无法满足患者和医院的需求。纸质病历不仅占用大量存储空间,而且容易丢失和损坏,同时难以实现信息的快…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)

4 创建docker容器 4.1创建网络 [rootlocalhost wutool]# docker network create -d macvlan --subnet192.168.137.0/24 --gateway192.168.137.2 --ip-range192.168.137.0/24 -o parentens33 nat 52af11381bfd655d175e4168265b2a507793e8fe48f119db846949ffd4dd27de [rootlocal…

【每天学个新注解】Day 15 Lombok注解简解(十四)—@UtilityClass、@Helper

UtilityClass 生成工具类的注解 将一个类通过注解变成一个工具类,并没有什么用,本来代码中的工具类数量就极为有限,并不能达到减少重复代码的目的 1、如何使用 加在需要委托将其变为工具类的普通类上。 2、代码示例 例: Uti…

设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、原型模式2、原型模式的使用场景3、优点4、缺点5、主要角色6、代码示例7、总结题外话关于使用序列化实现深拷贝 设计模式概述 创建型模式:工厂方法、抽象方法、建造者、原型、单例。 结构型模式有:适配器、桥接、组合、装饰器、…