面向对象编程应用实例|学习笔记

简介: 快速学习面向对象编程应用实例

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

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


面向对象编程应用实例

 

内容介绍:

一、面向对象编程的步骤

二、学生案例

三、小狗案例

四、盒子案例

五、景区门票案例

 

一、面向对象编程的步骤

1)声明(定义结构体,确定结构体名

2)编写结构体的字段

3)编写结构体的方法

 

二、学生案例

1) 自定义编写一个student结构体,包含name、gender、age、id、score字段,分别为string.string、int、int、float64类型。

2) 结构体中声明一个say方法,返回string类型,方法返回信息中包含所有字段值。

3) 在main方法中,创建Student结构体实例(变量),并访问say方法,并将调用结果打印输出。

在chapter10中新建一个文件夹命名为oopexercise,并建立main.go文件。输入共用代码:

package main

import (

"fmt"

写出主函数func main(){},编写一个结构体,题目中要求需要有以下字段:name、gender、age、id、score,分别是string.string、int、int、float64类型,则需要输入以下代码:

type student struct {

name string,

gender string

age int

id int

score float64

同时要有一个方法say,say这个方法能够返回所有字段的值,代码为:func (student*Student)为了方便我们直接把它声明成指针类型,这样可以提高开发效率。输入say()string {}表示没有参数的传入,然后格式化得到各个信息,代码为infostr := fmt.Sprintf("student的信息 name=[%v] gender=[%v], age=[%v] id=[%v] score=[%v]",student.name, student.gender,student.age,student.id, student.score)。然后将其返回输入return infostr

}。输入:var stu = student{创建一个student实例变量,再对各个字段进行赋值:

name : "tom",

gender : "male",

age : 18,

id : 1000,

score : 99.98,

}

输入:fmt.Println(stu.say())完成输出。

}

运行后发现效果与想象一致。

l 核心代码:

type student struct {

name string,

gender string

age int

id int

score float64

func (student*Student) say()string {

infostr := fmt.Sprintf("student的信息 name=[%v] gender=[%v], age=[%v] id=[%v] score=[%v]",

student.name, student.gender,student.age,student.id, student.score)

return infostr

}

func main() {

//测试

//创建一个student实例变量

var stu = student{

name : "tom",

gender : "male",

age : 18,

id : 1000,

score : 99.98,

}

fmt.Println(stu.say())

}

 

三、小狗案例

小狗案例[学员课后练习]

1)编写一个Dog结构体,包含name、age、weight字段

2)结构体中声明一个say方法,返回string类型,方法返回信息中包含所有字段值。

3)在main方法中,创建Dog结构体实例(变量),并访问say方法,将调用结果打印输出。

 

四、盒子案例(面向对象案例)

1)编程创建一个Box结构体,在其中声明三个字段表示一个立方体的长、宽和高,}

长宽高要从终端获取

2)声明一个方法获取立方体的体积。

3)创建一个Box结构体变量,打印给定尺寸的立方体的体积。

根据面向对象的编程规则,首先把结构体创建出来,type Box struct {,该结构体是struct类型。字符段长宽高都是都是float64类型,输入字符段:

len f1oat64

width float64

height float64

}

然后获取立方体的体积,输入func (box *Box) getVolumn()float64 {

return box.len*box.width* box.height}。下面进行测试,首先去创建一个box结构体变量var box Box,然后进行赋值:

box.len = 1.1

box.width =2.0

box.height =3.0

再去调用方法,输入volumn := box.getVolumn(),输出则需要以下代码:fmt.Printf("体积为=%.2f",volumn)

}

l 核心代码:

type Box struct {

len f1oat64

width float64

height float64

}

//声明一个方法获取立方体的体积

func (box *Box) getVolumn()float64 {

return box.len*box.width* box.height

}

//测试代码

var box Box

box.len = 1.1

box.width =2.0

box.height =3.0

volumn := box.getVolumn()

fmt.Printf("体积为=%.2f",volumn)

}

 

五、景区门票案例

1)一个景区根据游人的年龄收取不同价格的门票,比如年龄大于18,收费20元,其它情况门票免费.

2)请编写visitor结构体,根据年龄段决定能够购买的门票价格并输出

名字和年龄通过控制台输入,而且当输入姓名为n的时候就需要退出程序。因此需要一个循环,并在循环里进行判断。首先要创建一个visitor结构体,代码为type Visitor struct {},结构体类型为struct。结构体中的字段有年龄(Age),还有名字(Name),分别是int类型和string类型,输入:Name string Age int,写入字段。此时还有一个方法能够计算每个姓名对应年龄下的门票,通过直接绑定的方法,并利用visitor的指针类型,代码为:func(visitor *Visitor) showPrice(){}。通过判读得出每位游客的景区票价,输入代码:

if visitor.Age >18 {

fmt. Printf("游客的名字为%v年龄为%v收费20元 \n", visitor.Name, visitor.Age)

}else {

fmt. Printf("游客的名字为%v年龄为%v免费\n", visitor.Name, visitor.Age)

}

如果参观游客的年龄大于18岁,则收费20块钱,输出结果为:游客的名字为年龄为收费20块钱,简单明了。如果参观游客的年龄不是大于18岁,那就是其他情况,即可以免费参观。而对年龄的严谨判断,比如当游客的年龄小于等于8岁或者大于等于90岁时,我们也进行一个判断,并输出以下内容:考虑到安全,请不要玩了,则需要以下代码:

if visitor.Age >=90 || visitor.Age <=8 {

fmt.Print1n("考虑到交全,就不要玩了")

return

测试的时候,首先需要创建一个visitor,但是名字还有年龄是需要输入的,所以此时需要利用for循环(var v Visitorfor for{}),并完成提示:请输入你的名字,然后得到Name的值(fmt.Print1n(”请输入你的名字")fmt.Scan1n(&v. Name));继续接受游客的年龄(fmt.Println("请输入你的年龄")fmt.Scan1n(&v. Age))。然后去调用价格的判断(v.showPrice()),但是题目中还有一个要求,需要在Name为n时,退出程序,则需要添加一个判断并提示退出程序:

if v.Name == "n”{

fmt.Println("退出程序....")

break

l 核心代码:

type Visitor struct {

Name string

Age int

}

func(visitor *Visitor) showPrice(){

if visitor.Age >=90 || visitor.Age <=8 {

fmt.Print1n("考虑到交全,就不要玩了")

return

}

if visitor.Age >18 {

fmt. Printf("游客的名字为%v年龄为%v收费20元 \n", visitor.Name, visitor.Age)

}else {

fmt. Printf("游客的名字为%v年龄为%v免费\n", visitor.Name, visitor.Age)

}

//测试:这段代码放在main函数中

var v Visitorfor

for{

fmt.Print1n(”请输入你的名字")

fmt.Scan1n(&v. Name)

if v.Name == "n”{

fmt.Println(“退出程序....")

break

}

fmt.Println("请输入你的年龄")

fmt.Scan1n(&v. Age)

v.showPrice()

}

}

相关文章
|
设计模式 算法 程序员
设计模式的概述及各个模式的功能介绍
设计模式的概述及各个模式的功能介绍
129 0
|
2月前
|
缓存 开发者 网络架构
ArkTS 函数方法基础:掌握核心编程概念
本文深入探讨了ArkTS中的函数和方法,涵盖函数声明、参数处理、返回类型、作用域、函数类型等内容,帮助开发者掌握ArkTS的核心编程概念。通过实例讲解可选参数、rest参数、默认参数等特性,并讨论函数在面向对象编程、性能优化和错误处理中的应用,助力开发者编写更健壮、可维护的代码。
354 0
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
8月前
|
算法 编译器 C++
【C++入门到精通】新的类功能 | 可变参数模板 C++11 [ C++入门 ]
【C++入门到精通】新的类功能 | 可变参数模板 C++11 [ C++入门 ]
74 1
|
8月前
|
设计模式 存储 SQL
第四篇 行为型设计模式 - 灵活定义对象间交互
第四篇 行为型设计模式 - 灵活定义对象间交互
145 0
|
8月前
|
存储 设计模式 Python
Django中的多态模型概念、使用场景以及如何实现多态模型
Django中的多态模型概念、使用场景以及如何实现多态模型
119 0
Django中的多态模型概念、使用场景以及如何实现多态模型
|
设计模式 前端开发
前端通用编程基础的设计模式之装饰器
在前端开发中,我们常常需要对现有的函数或者对象进行扩展和修饰。这时候就需要使用装饰器模式来实现动态地添加新功能,而不影响原有功能的实现。
158 0
|
设计模式 算法 前端开发
前端通用编程基础的设计模式之策略
策略模式是一种常见的设计模式,它可以帮助我们在运行时选择算法,并且可以将算法与具体的业务逻辑分离。下面就让我们来看看策略模式的特点和优势。
90 0
|
设计模式 前端开发 Java
前端通用编程基础的设计模式之单例
单例模式是一种常见的设计模式,它可以保证一个类只有一个实例,并提供了一个全局访问点。下面就让我们来看看单例模式的特点和优势。
64 0