go语言学习与面向对象再思考

简介: 据说Smalltalk发明者Alan Kay就曾经说过: 我发明了面向对象,而我可以告诉你C++并不是我头脑里所想的东西. 面向对象的困惑 计算机里面只有数据和算法,数据用于对现实世界抽象建模,算法对数据演算,这已经很好,怎么出来一个面向对象这个"怪胎". 面向对象教学每次都要从对现实世

据说Smalltalk发明者Alan Kay就曾经说过: 我发明了面向对象,而我可以告诉你C++并不是我头脑里所想的东西.

面向对象的困惑

计算机里面只有数据和算法,数据用于对现实世界抽象建模,算法对数据演算,这已经很好,怎么出来一个面向对象这个"怪胎".


面向对象教学每次都要从对现实世界的模拟讲起,还记得那个会叫的鸭子的对象吗?面向对象认为对象有状态和行为,由此对现实世界抽象建模.然而现实世界就是面向对象的世界吗?


准确的说当时我所学的C++的面向对象对世界的模拟就是反世界反牛顿定理的,因为事物之间是相互作用的,C++的面向对象根本无法对现实世界抽象建模.


这就是我当时学面向对象为什么那么痛苦,面向对象和我对世界的认知是矛盾的,然而我当时却选择相信面向对象是完全正确的.


如同非欧几何一样和现实世界关系不大的东西也是有用的,起码是一个逻辑训练.也如同非欧几何一样C++的面向对象也根据一定的规则构成了自己的抽象系统.


语言是个抽象系统


每个语言根据自己的规则构成了一个抽象系统,通过抽象逻辑演绎完成任务.


面向对象是个思想

面向对象基于人对客观事物的认知,这个是自然而然的.但面向对象有多种实现方式,每个语言可以选择自己的实现方式或者自己创造一种实现方式.目前看没有一种语言能够实现一个反映客观世界的面向对象,毕竟客观世界太复杂了.正是一个不能反映客观世界的语言实现,语言引入面向对象解决了一部分问题,也因引入面向对象而制造出更多的问题.


go中的面向对象

go语言就自己创造了一种实现面向对象的方式,go里面没有了class,对象的方法也不是直接和对象绑定在一起的,对象在go里面其实就是一个算法(函数)的参数.这样把数据算法和面向对象很好的结合起来.



目录
相关文章
|
20天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
31 7
|
20天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
20天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
93 71
|
19天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
100 67
|
22天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
91 62
|
24天前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
20天前
|
存储 Go
go语言中映射
go语言中映射
32 11
|
22天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
31 12
|
21天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
28 9
|
25天前
|
安全 Serverless Go
Go语言中的并发编程:深入理解与实践####
本文旨在为读者提供一个关于Go语言并发编程的全面指南。我们将从并发的基本概念讲起,逐步深入到Go语言特有的goroutine和channel机制,探讨它们如何简化多线程编程的复杂性。通过实例演示和代码分析,本文将揭示Go语言在处理并发任务时的优势,以及如何在实际项目中高效利用这些特性来提升性能和响应速度。无论你是Go语言的初学者还是有一定经验的开发者,本文都将为你提供有价值的见解和实用的技巧。 ####