程序员的知识教程库

网站首页 > 教程分享 正文

面向对象编程基础(面向对象编程基础Python)

henian88 2024-09-07 15:17:07 教程分享 64 ℃ 0 评论

导语:了解了设计模式的基础知识后,可以发现很多设计模式都是基于面向对象设计而产生的。对此个人理解,面向对象是软件编程世界的一种世界观,在认识过程和实践过程中利用面向对象设计思想而产生了各种设计模式和架构模式。



参考文档:

百度百科

面向对象的三个基本特征:

https://www.cnblogs.com/autumn001/p/9036148.html

1、什么是面向对象编程

1.1、概述

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

OOP是一种计算机编程架构。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。

面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程,也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。

面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块。


1.2、主要概念

面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。


1.3、面向对象和面向过程的区别

“面向过程”pop(Process-oriented programming)的缩写,是一种是事件为中心的编程思想。就是分析出解决问题所需的步骤,然后用函数把这写步骤实现,并按顺序调用。

而”面向对象“是以“对象”为中心的编程思想。

2、面向对象编程的三大特征


2.1、封装

封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

2.2、继承

面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。

要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

2.3、多态

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

实现多态,有二种方式,覆盖,重载。


3、php的面向对象

假如有一个需求,php需要请求第三方平台的接口数据。

直接写代码:

<?php
$data =?array(
????????????'Key' => “第三方平台的密钥”,
????????????'Method' => “请求第三方平台请求地址”,
????????????'Timestamp' => date("Y-m-d H:i:s"),
????????????'Content' => “post请求数据”,
????????????'ClientVersion' => '1.0',
????????????'ApiVersion' => '1.0',
????????);
????????$ch = curl_init();
????????curl_setopt($ch, CURLOPT_URL,”请求第三方平台请求地址”);
????????curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
????????curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
????????// 设置POST方式发送数据
????????curl_setopt($ch, CURLOPT_POST, 1);
????????curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data ));
????????$fs = curl_exec($ch);
????????curl_close($ch);
????????$afs = json_decode($fs, true);
????????return $afs;
?>


用oop的方式,封装一个类:

<?php
class CentralPost{
????private $key;??????//第三方平台的密钥
????private $url;??????//请求第三方平台请求地址
????private $method;???//请求第三方平台的方法
????private $content;??//post请求数据
????public function getKey()
????{
????????return $this->key;
????}
????public function setKey($key)
????{
????????$this->key = $key;
????}
	.... url 、method、content的set和get代码略

????protected function createData(){
????????return array(
????????????'Key' => $this->getKey(),
????????????'Method' => $this->getMethod(),
????????????'Timestamp' => date("Y-m-d H:i:s"),
????????????'Content' => $this->getContent(),
????????????'ClientVersion' => '1.0',
????????????'ApiVersion' => '1.0',
????????);
????}

????public function postData(){
????????$apiRequest = json_encode($this->createData());
????????$ch = curl_init();
????????curl_setopt($ch, CURLOPT_URL, $this->getUrl());
????????curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
????????curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
????????// 设置POST方式发送数据
????????curl_setopt($ch, CURLOPT_POST, 1);
????????curl_setopt($ch, CURLOPT_POSTFIELDS, $apiRequest);
????????$fs = curl_exec($ch);
????????curl_close($ch);
????????$afs = json_decode($fs, true);
????????return $afs;
????}
}

然后在某个地方执行:

<?php
	$obj = new CentralPost();
	$obj->setUrl(“url”);
	$obj->setMethod(“method”);
	$obj->setKey(“key”);
	$obj->setContent(“Content”);
	$res = $obj->postData();
?>

假如又有一个第三方平台要对接了,内容都差不多,只是在createData()这个地方有区别,那么就可以用到类的继承特性,新增一个子类,覆写一下createData()方法:

<?php
class CentralPostChild extends CentralPost{
	?protected function createData(){
	????????return array(
	????????????'ChildKey' => $this->getKey(),
	????????????'ChildMethod' => $this->getMethod(),
	????????????'ChildContent' => $this->getContent(),
	????????);
	????}
}
?>

小结:面向对象有很多的好处,但它不是编程的必要条件,在实际应用中是否使用则需自己考量。和很多设计模式架构模式一样,它们优化了程序开发的过程、提高了程序设计的质量和效率,同时也增加了程序的“运行成本”,因为它们是“以人为本”为核心思想的产物。面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程。设想未来,机器人如果有了思维,我想它们应该也是和人的思维是相通的、具有人性的,因为写代码的程序员是面向对象的。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表