面向对象编程必要性 | 学习笔记

简介: 快速学习面向对象编程必要性

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程面向对象编程必要性】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9666


面向对象编程必要性

 

Go 语言的面向对象编程与传统的面向对象编程(如 Java、donite 等语言)有很大区别。此处,应在“面向对象”中的“对象”二字加引号,意思是 Go 语言的面向对象与传统意义的面向对象含义不同,前者没有“类”的概念,而是使用“结构体”来替代“类”的概念,即在面向对象中,结构体的地位类似于 class。因此,在学习 Go 语言中面向对象编程时,要注意其与传统意义上面向对象编程的异同点。

 

一、结构体的引入

通过“养猫猫的问题”理解为什么需要面向对象编程。

张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。另一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。

1.使用现有技术解决

通过对解决该问题的现有技术/传统方法的缺点进行分析,进而理解结构体与其他数据类型的区别及结构体的优点。

(1)使用单独的定义变量解决,即用变量记录猫的各个信息

①思路分析:

一共有2只猫,且每只猫都对应姓名、年龄和颜色3个特征,因此,应定义6个变量。

②代码演示:

package main

import (

"fmt"

)

func main() {

var cat1Name string = "小白"

var cat1Age int = 3

var cat1color string = "白色"

var cat2Name string = "小花"

var cat2Age int = 100

var cat2Color string = "花色"

//这种单独定义变量的方式过于繁琐,定义的变量数可能很多,无法通过一个变量将猫对应的特征属性取出,无法继续编写。

fmt.Println("ok")

}

(2)使用数组解决,将猫的信息放在数组中来解决

对于每只猫,其各个特征对应的变量属性不同,如名字是 string 类型的变量,年龄是int类型的变量,颜色是 string类型的变量。

代码演示:

package main

import (

"fmt"

)

func main() {

var catNames [2]string = [...]string{"小白","小花"}

var catAges [2]int = [...]string(3,100)

var catColors [2]string = [...]string("白色","花色")

// 由于猫的“名称”“年龄”“花色”分别属于不同的数组,若输入猫的名称“小白”,要输出其年龄、花色等信息较为困难,代码无法继续编写。

fmt.Println("ok")

}

如上两段代码,若不输入 fmt.Println("ok"),则会显示代码中的

包“fmt”未使用;且由于定义的变量/数组未使用,代码在运行时会报错。

综上,无论是通过变量或者数组的方式解决该问题都较为困难,原因在于:这两种方法将数据分散记录,不利于进行数据管理和维护,每只猫的属性不止一个,且这些属性都同时属于一个对象,故而使用这两种方法对各个属性分散记录不利于进行数据管理和维护;这两种方法无法对现有数据进行操作,如假设题目中猫的属性中还包括一些行为,如“猫通过训练可以做算术题”等,这两种方法无法体现。

(3)使用 map 解决

该种方法同样存在数据类型不一致的问题,通过 map[string]string 可以保存名字的信息,却无法同时保存年龄信息,因为两者对应的变量数据类型不同;此外,也存在各数据需分散记录的问题,

2.现有技术的缺点分析

(1)使用变量或数据来解决“养猫”问题时,均不利于数据的管理与维护。因为猫的名字、年龄、颜色的信息均属于一只猫,但是具体操作时,却将这些信息分开进行了保存。

(2)若要对每只猫的属性(名字、年龄、颜色)进行操作(绑定方法)也很难处理。

使用传统方法来处理这种一个对象具有多个属性的情形十分困难,因此,我们不使用传统的方法进行编程,而可以使用结构体的方法来解决。结构体是什么?结构体有何特征?即是我们本章节要学习的内容。

相关文章
|
6月前
|
存储 编译器 数据安全/隐私保护
【软件设计师备考 专题 】面向对象开发方法:理解类、对象和封装
【软件设计师备考 专题 】面向对象开发方法:理解类、对象和封装
93 0
|
3月前
|
算法 Java 程序员
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
64 9
|
1月前
|
PHP 开发者
PHP编程中的面向对象基础
【9月更文挑战第36天】在PHP的世界中,面向对象编程(OOP)是一块基石。它不仅为代码带来了结构、可维护性与重用性,还让复杂的问题变得简单化。通过掌握类与对象、继承与多态等核心概念,开发者可以构建出更加强大和灵活的应用。本文将引导你理解这些概念,并通过实例展示如何在PHP中应用它们,让你轻松驾驭OOP的力量。
|
2月前
|
PHP 开发者
PHP编程中的面向对象基础与实践
【9月更文挑战第27天】在PHP的海洋里,面向对象编程(OOP)是一艘强大的船,它不仅能让代码组织得更加优雅,还能提高开发效率。本文将带你领略OOP的魅力,从基础概念到实际应用,让你轻松驾驭这艘船,开启高效编程之旅。
|
3月前
|
Java
利用抽象类和接口提升你的代码质量!Java编程界的黑魔法
利用抽象类和接口提升你的代码质量!Java编程界的黑魔法
36 2
|
4月前
|
存储 Java 开发者
Java编程实践:探索面向对象设计原则
【7月更文挑战第31天】在Java的世界中,面向对象设计(OOP)原则是构建健壮、可维护和可扩展软件的基石。本文将深入探讨这些核心原则,并通过实际代码示例揭示其应用之美。
47 0
|
5月前
|
关系型数据库 数据库连接 开发者
面向对象设计原则与实践
面向对象设计原则与实践
|
5月前
|
Java
Java编程界的黑魔法:利用抽象类和接口提升你的代码质量!
【6月更文挑战第17天】在Java中,抽象类和接口是提升代码质量的关键。抽象类通过提供共享接口和部分实现减少冗余,强制子类实现标准,并作为扩展点。接口则定义行为契约,促进多态性、松耦合和易扩展性。两者结合使用,可以在保证灵活性的同时增强代码结构和可维护性,为复杂系统的构建打下坚实基础。
39 0
|
6月前
|
Java
类与对象:Java面向对象编程的基石
类与对象:Java面向对象编程的基石
|
6月前
|
大数据 开发者
探索编程范式:面向对象与函数式的抉择
在当今快速发展的软件开发领域,面向对象编程(OOP)和函数式编程(FP)是两种重要的编程范式。本文将深入比较这两种范式的特点、应用场景和优劣势,为读者提供选择时的参考,并探讨如何在实际项目中灵活运用它们。
下一篇
无影云桌面