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

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

开发者学堂课程【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)若要对每只猫的属性(名字、年龄、颜色)进行操作(绑定方法)也很难处理。

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

相关文章
|
9月前
|
存储 编译器 数据安全/隐私保护
【软件设计师备考 专题 】面向对象开发方法:理解类、对象和封装
【软件设计师备考 专题 】面向对象开发方法:理解类、对象和封装
134 0
|
6月前
|
算法 Java 程序员
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
91 9
|
7月前
|
存储 Java 开发者
Java编程实践:探索面向对象设计原则
【7月更文挑战第31天】在Java的世界中,面向对象设计(OOP)原则是构建健壮、可维护和可扩展软件的基石。本文将深入探讨这些核心原则,并通过实际代码示例揭示其应用之美。
61 0
|
8月前
|
Java 开发者
Java面向对象编程(OOP)的四个主要概念
【6月更文挑战第19天】Java OOP的基石是封装、抽象、继承和多态。封装是通过类隐藏数据细节;抽象简化复杂性,用接口和抽象类实现;继承让子类从父类继承属性和行为,促进代码重用;多态一个接口可有多种形态,分编译时和运行时。这些概念支持灵活且可扩展的软件设计。
63 1
|
9月前
|
Java
类与对象:Java面向对象编程的基石
类与对象:Java面向对象编程的基石
|
9月前
|
并行计算 数据处理 开发者
编程范式的抉择:面向对象编程与函数式编程的对决
在当今的软件开发领域,面向对象编程(Object-Oriented Programming,OOP)和函数式编程(Functional Programming,FP)是两种重要的编程范式。本文将比较并探讨这两种编程范式的特点、优势和适用场景,以帮助开发者在编程选择上做出明智的决策。
|
9月前
|
Serverless 对象存储 C++
第十三章:C++面向对象编程思想详解
第十三章:C++面向对象编程思想详解
155 0
|
架构师 JavaScript
架构整洁之道-02 编程范式-面向对象编程
编程范式:范式是编程的方式,和语言无关。主要有三种方式:结构化编程、面向对象编程、函数式编程。
284 0
|
PHP 开发者
面向对象编程思想介绍|学习笔记
快速学习面向对象编程思想介绍
面向对象编程思想介绍|学习笔记
|
测试技术
软件测试面试题:面向对象编程,简称OOP,是一种程序设计思想。
软件测试面试题:面向对象编程,简称OOP,是一种程序设计思想。
105 0