首页 > 其他分享 >面向对象教程

面向对象教程

时间:2023-07-31 17:47:10浏览次数:33  
标签:body 教程 eye 定义 int 面向对象 CountryBall 构造函数

本文会涉及到一下编程语言的内容:C++、java、python等面向对象的语言

本文举例的语言均为tiobe语言排行榜前20名中面向对象中我了解的,包括C++、C#、Java、JavaScript、Python3、Ruby、Go、Swift、PHP(排名不分先后)

类(class)与对象(object)

我们用国家球来举例

国家球就是一个扁形上窄下宽的圆圈,在中间画上对应国家的国旗,再填上眼镜。这就定义了一个类class

而我们按照这个流程,绘制一个国家球,就形成了一个对象object
image
比如上面这个波兰球,就是国家球这个类的一个对象
image
上面的奥地利球也是国家球的一个对象

一个类可以对应多个对象,这些对象包含的数据种类是相同的,他们都有一个球身和一双眼睛,但具体的数据可以不同,一个球身是波兰国旗一个是奥地利国旗,一个眼睛是打赢苏波战争笑疯了另一个是打完一战傻掉了(第一个出自《<钢铁是怎样炼成的>PPT 序章 历史背景》,第二个出自《球说历史 欧洲片头》)

对象实现

属性和方法

类中主要有两个东西:属性和方法

国家球类中,眼睛和国旗就是两个属性,而移动、变换眼睛等都是方法。

简单来说,属性就是名词,定义了该类的各个对象是怎么样的,而方法是动词,定义了各个对象怎么用

构造函数

大部分面向对象的编程语言中,都有构造函数。构造函数用于创建一个对象。

像上面的奥地利球,他是国家球这个类的一个实现。但创建这个奥地利球对象时,电脑并不知道他内部是什么,也不知道他的眼睛是什么样的。我们就需要构造函数,告诉电脑,奥地利球内部是横红白红三色旗,眼睛是右上一个圆圈左下一个圆圈。

构造函数除了可以给属性赋值以外,也可以执行一些操作。比如传入横红白红三色旗时,可以对旗帜进行弯曲,再添加高光阴影,使其看起来更像球体。

简单来说,构造函数初始化了一个对象

构造函数可以自己定义,默认构造函数不会执行任何操作。构造函数在创建对象时都会执行一次。

具体代码

我们会创建一个国家球CountryBall类,并创建其两个对象PolandBall和AustriaBall

定义类

首先,我们需要定义一个类,也就是有一个球身和一双眼睛,同时,我们还需要有类方法“移动”和“变换表情”。再自定义一个构造函数,用来赋值球身。

眼睛和球身暂时使用数字代替,波兰国旗为1,奥地利为2,波兰的笑为3,奥地利傻掉为4,方法暂时不写内容

几乎所有编程语言都使用class关键字来定义类,代码如下:

class CountryBall{
	int eye,body;//定义眼睛,球身
	void move(){}//定义移动
	void changeEmotion(int newEye){}//定义变换表情
	CountryBall(int body1,int eye1){
		body=body1;
		eye=eye1;
		//另一种写法:this.body=body1;,只适用于java
		//另一种写法:this->body=body1;,只适用于C++
	}//定义构造函数。构造函数名要与类名相同,构造函数不需要返回值
}//C++、C#、java,这三个语言写法差不多就一起说了,C++在这里需要加上分号,java、C#不需要
class CountryBall:
	eye:int
	body:int
#	定义属性
	def move(self):
#		self是python的关键字,用于访问本类的属性,一般方法都要加
		pass
	def changeEmotion(self,newEye:int):
		pass
	def __init__(self,body:int,eye:int):
		self.body=body
		self.eye=eye
#python,在python中,名称为__init__的函数会自动识别为构造函数
class CountryBall
	@@eye=0
	@@body=0
#	ruby中,类属性必须初始化
	def move()
	end
	def changeEmotion(newEye)
	end
	def initialize(body,eye)
		@@eye=eye
		@@body=body
	end
end
#ruby,在ruby中,名称为initialize的函数会自动识别为构造函数
class CountryBall
	def move()
	end
	def changeEmotion(newEye)
	end
	def initialize(body,eye)
		@eye=eye
		@body=body
#		使用一个@创建的变量也是类属性,并非该函数的局部变量
	end
end
#ruby的另一种写法
class CountryBall{
	var $eye
	var $body
	function move(){}
	function changeEmotion($newEye){}
	function __construct($body,$eye){
		$this->eye=$eye;
		$this->body=$body;
	}
}//PHP,在PHP中,__construct会自动识别为构造函数
class CountryBall{
	var eye: Int
	var body: Int
	func move(){}
	func changeEmotion(newEye: Int){}
	init(body: Int,eye: Int){
		self.eye=eye
		self.body=body
	}
}//swift,在swift中,用init来定义构造函数,不需要func关键字

以下几种语言为特殊情况:

  1. C++中,struct和class都可以定义类,区别是struct中的数据默认为public,而class中默认为private,public和private的区别我们以后再说。
    注:C中也有struct,但struct中不能定义方法,只能有public的变量。因此C不属于面向对象的语言,不在我们的讨论范围之内。在C/C++教程中会提到struct,到时候再详细讲
  2. JavaScript没有类,直接使用JSON定义对象,我们在创建对象中会讲到JavaScript
    我们有专门的JSON教程,可以在那里详细了解JavaScript中的对象
  3. Go中也没有类,至少我没有找着,只看到了struct和interface,不过这俩结合起来可以当类用,代码如下
type CountryBall interface{
	move()
	changeEmotion(newEye int)
}//定义类中的方法
type CountryBalls struct{
	body int
	eye int
}//定义类中的变量,注意这里的名称比上面多了个s
func (CountryBalls s) move {}
func (CountryBalls s) changeEmotion(newEye int) {}//定义方法的具体内容,方法名称一定要和接口中的相同
//实现类,即定义对象时,使用接口名称作为类名称

实现类(创建对象)

大部分语言中,创建对象和创建变量的语法相同

定义构造函数主要有两种方式:

  1. 使用new关键字或new函数
CountryBall PolandBall=new CountryBall(1,3);
CountryBall AustriaBall=new CountryBall(2,4);
//java、C#、PHP
//PHP前半部分与另外两个语言不同,应去掉CountryBall改成$
PolandBall=CountryBall.new(1,3)
AustriaBall=CountryBall.new(2,4)
#ruby
  1. 使用类名称
PolandBall=CountryBall(1,3)
AustriaBall=CountryBall(2,4)
# python、C++、Swift
# C++需要在最前面加上类型名称CountryBall,结尾要填上分号,Swift需要加上变量关键字let,python什么都不用加
#python在调用构造函数时,最好准确赋值,CountryBall(body=1,eye=3)
  1. 特例
var PolandBall CountryBall
var AustriaBall CountryBall
PolandBall=CountryBalls{body:1 ,eye: 3}
AustriaBall=CountryBalls{body:2 ,eye: 3}
//go
var PolandBall={
	"body":1,
	"eye":3,
	"move":function(){}
	"changeEmotion":function(var newEye){}
}
var PolandBall={
	"body":2,
	"eye":4,
	"move":function(){}
	"changeEmotion":function(var newEye){}
}
//javaScript

可以看出,javaScript创建对象的代码,与json完全一致,只是json没有方法。事实上,json全名是JavaScript Object Notation(JavaScript 对象表示法),他本身就是起源于JavaScript的一门语言

本期教程到此结束,我还要忙着做球说历史第二集呢
小预告:
image

标签:body,教程,eye,定义,int,面向对象,CountryBall,构造函数
From: https://www.cnblogs.com/eason66-blog/p/object1.html

相关文章

  • Apipost教程?一篇文章玩转Apipost
    你是否经常遇到接口开发过程中的各种问题?或许你曾为接口测试与调试的繁琐流程而烦恼。不要担心!今天我将向大家介绍一款功能强大、易于上手的接口测试工具——Apipost,并带你深入了解如何玩转它,轻松实现接口测试与调试。什么是Apipost?Apipost是一款API全生命周期管理平台,它提供了......
  • Go开发环境配置保姆式教程,VScode
    需求:Go开发环境配置以及VScode插件安装 1.1安装go1.20.6.windows-amd64.msi 下载地址:https://golang.google.cn/dl/ (1)  选择Windows版本go1.20.6.windows-amd64.msi  (2)下载完成后,双击.msi进行安装   (3)点击next  (4)  勾选同意,点击n......
  • 第7期ThreadX视频教程:如何实现RTOS高效的任务管理,抢占式调度,时间片调度和零中断延迟(20
    视频教程汇总帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519 本期视频为大家分享高效的RTOS任务管理设计,通过这个点来引出抢占式调度,时间片调度,任务优先级设置和零中断延迟。RTOS任务高效管理是我们使用RTOS一个重要原因。视频:https://www.bilibili.com/vi......
  • 一篇关于预测“未来”的教程:运行在 Intel AIxBoard™ 开发板上的 TDengine
    英特尔数字化开发套件AIxBoard是一款AI架构的人工智能嵌入式开发板,体积小巧功能强大,可以在时序数据预测、图像分类、目标检测分割和语音处理等应用中并行运行多个神经网络。作为一款面向专业创客、开发者的功能强大的小型计算机,借助开源人工智能工具套件OpenVINO,AIxBoard......
  • Java NIO系列教程(十一) Pipe
    JavaNIO管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示: 创建管道通过Pipe.open()方法打开管道。例如:Pipepipe=Pipe.open();向管道写数据要向管道写数据,需要访问sink通道。像这样:Pi......
  • Java NIO系列教程(三) Buffer
    JavaNIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIOBuffer对象,并提供了一组方法,用来方便的访问该块内存。下面是NIOBuffer相关的话题列表: Buffe......
  • 无涯教程-jQuery - css( properties )方法函数
    css(properties)方法将键/值对象设置为所有匹配元素的样式属性。css(properties)-语法selector.css(properties)上面的语法可以写成如下-selector.css({key1:val1,key2:val2....keyN:valN})这是此方法使用的所有参数的描述-key:value   - 设置为样式属性......
  • 基于面向对象的数据封装
    基于面向对象的数据封装目录基于面向对象的数据封装1基于面向对象的数据封装优点2示例1基于面向对象的数据封装优点将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了;对类的属性和方法增加访问权限控制......
  • 四旋翼无人机使用教程
    文章目录前言一、检查遥控器电源开关混控拨码开关微调开关飞行模式刹车开关行程开关接收机对码二、检查飞机检查接线三、解锁并飞行前言PX4固件QGC地面站Pixhwak飞控Mc6c遥控器开源飞控博大精深,欢迎广大爱好者加博主微信名片,一起学习交流。一个人可以走的更快,一群人才能走得......
  • 安卓运行 lxc + docker 教程
    byredblue(弗朗西斯科)【一】安装lxc手机打开termux一键更换北京大学源,执行echo"debhttps://mirrors.pku.edu.cn/termux/termux-mainstablemain">PREFIX/etc/apt/sources.list安装lxcpkgupdatepkginstallroot-repopkginstalllxc【二】关于......