面向对象(类/继承/封装/多态)详解

news2024/11/17 10:31:18

简介:

面向对象编程(Object-Oriented Programming,OOP)是一种广泛应用于软件开发的编程范式。它基于一系列核心概念,包括类、继承、封装和多态。在这篇详细的解释中,我们将探讨这些概念,并说明它们如何在PHP等编程语言中实现。

类(Class):

类是OOP的基础。它是一种用于创建对象的蓝图或模板。类定义了对象的属性(成员变量)和方法(成员函数)。类是用户定义的数据类型,允许将相关数据和功能封装在一个单一的单元中。
在PHP中,创建一个类的语法如下:

class Person {
    public $name; // 属性
    public function sayHello() { // 方法
        echo "Hello, my name is " . $this->name;
    }
}

这个例子中,我们定义了一个名为Person的类,它有一个属性$name和一个方法sayHello。

对象(Object):

对象是类的实例。它是根据类的定义创建的实体,可以访问类中定义的属性和方法。对象是类的具体实例,它包含了类定义的数据和行为。
在PHP中,创建一个类的对象的语法如下:

$person = new Person();
$person->name = "John";
$person->sayHello(); // 输出 "Hello, my name is John"

在这个例子中,我们创建了一个名为 p e r s o n 的对象,它是 P e r s o n 类的实例,可以访问 person的对象,它是Person类的实例,可以访问 person的对象,它是Person类的实例,可以访问name属性和sayHello方法。

继承(Inheritance):

继承是OOP中的一项关键概念。它允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以继承父类的特性,并可以添加新的属性和方法,或者重写继承的方法。

class Student extends Person {
    public $studentId;
}

在这个示例中,Student类继承了Person类的属性和方法,同时添加了$studentId属性。这允许Student对象访问Person类的sayHello方法以及自己的属性和方法。
继承有助于代码重用,促进了代码的组织和扩展。

封装(Encapsulation):

封装是一种将数据和操作数据的方法组合在一起的概念。它强调了数据的隐藏和保护,以防止未经授权的访问。封装将数据(属性)设为私有或受保护的,同时提供公共的方法(接口)来访问和操作数据。

class Person {
    private $name;
    public function setName($name) {
        $this->name = $name;
    }
    public function getName() {
        return $this->name;
    }
}

在这个示例中,$name属性被设置为私有,只能通过setName和getName方法进行访问。这样可以控制数据的访问和修改,确保数据的完整性和安全性。
封装有助于隐藏内部实现细节,提高代码的可维护性和安全性。

多态(Polymorphism):

多态是一种让不同的类实现相同的接口或继承相同的父类,并根据具体的实例执行不同操作的能力。多态允许使用通用的接口来处理不同类型的对象。

interface Shape {
    public function area();
}

class Circle implements Shape {
    public function area() {
        // 计算圆形面积
    }
}

class Square implements Shape {
    public function area() {
        // 计算正方形面积
    }
}

在这个示例中,Shape接口定义了一个area方法,然后Circle和Square类都实现了这个接口。这使得我们可以使用统一的方式来计算不同形状的面积,而无需关心具体是圆形还是正方形。
多态提高了代码的灵活性和可扩展性,使代码更易于维护和修改。

结论 :

面向对象编程是一种强大的编程范式,它使代码更易于理解、扩展和维护。类、继承、封装和多态是OOP的核心概念,它们为程序员提供了更好的工具来构建复杂的应用程序。通过合理地应用这些概念,你可以创建出高质量、可重用和可扩展的代码,以应对不断变化的需求。这种面向对象的方法对于现代软件开发至关重要,无论是在PHP还是其他编程语言中。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1142537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Git企业开发】第一节.Git 初识

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏: 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!&#xff01…

Clion 初始化 QT

1.新建项目 2.打开项目,如果出现报错 By not providing “FindQt5.cmake” in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by “Qt5”, but CMake did not find one. 解决方法:安装QT5和对应的…

吴恩达《机器学习》1-2:什么是机器学习?

一、什么是机器学习? Arthur Samuel(1959): 他定义机器学习为,在进行特定编程的情况下,给予计算机学习能力的领域。 Tom Mitchell(1998): 他定义的机器学习是&#xff0c…

一文通透位置编码:从标准位置编码到旋转位置编码RoPE

前言 关于位置编码和RoPE 我之前在本博客中的另外两篇文章中有阐述过(一篇是关于LLaMA解读的,一篇是关于transformer从零实现的),但自觉写的不是特别透彻好懂再后来在我参与主讲的类ChatGPT微调实战课中也有讲过,但有些学员依然反馈RoPE不是…

《计算机工程》期刊投稿记录(实时更新)

文章目录 2023年10月27首次更新 2023年10月27首次更新 本人于2023-09-22投稿《计算机工程》,预计2023-10-25完成加急外审,目前是2023-10-27,超时2天。同门超时17天。 在CSDN水评论区后发现:近期投稿《计算机工程》的文章&#x…

Android开发知识学习——HTTP基础

文章目录 学习资源来自:扔物线HTTPHTTP到底是什么HTTP的工作方式URL ->HTTP报文List itemHTTP的工作方式请求报文格式:Request响应报文格式:ResponseHTTP的请求方法状态码 HeaderHostContent-TypeContent-LengthTransfer: chunked (分块传…

并发编程 - 并发可见性,原子性,有序性 与 JMM内存模型

1. 并发三大特性 并发编程Bug的源头: 原子性 、 可见性 和 有序性 问题 1.1 原子性 一个或多个操作,要么全部执行且在执行过程中不被任何因素打断,要么全部不执行。 在 Java 中,对基本数据类型的变量的读取和赋值操作是原子性操…

Linux中进程的控制(上)

对于进程控制的第一个学习部分那就是使用fork去创建子进程这一部分,请去复习fork那一节的笔记。 这里我们主要学习一个在使用fork创建子进程的时候,是如何进行写时拷贝的,在之前的那一节fork的学习中我们学习到的是使用fork创建一个子进程&a…

企业管理系统有哪些?

文章目录 企业管理系统一、ERP 企业资源计划(Enterprise Resource Planning)二、OMS 订单管理系统(Order Management System)三、WMS 仓库管理系统(Warehouse Management System )四、TMS 运输管理系统 (Tr…

【计算机网络】认识协议

目录 一、应用层二、协议三、序列化和反序列化 一、应用层 之前的socket编程,都是在通过系统调用层面,如今我们来向上打通计算机网络。认识应用层的协议和序列化与反序列化 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应…

GCC编译器 gcc编译过程 ‘ ‘ ‘ ‘ --- 记一次查缺补漏 ‘ ‘

文章目录 前言GCC介绍GCC编译过程预处理编译汇编链接关于链接: 前言 学习的过程遇到了.s后缀的文件,原来是gcc的编译过程,复习一下。 又牵扯到了各种C编译器,诸如MSVC、MinGW、ClangLLVM等,挖个坑先。 还有关于动态链…

大厂面试题-JVM为什么使用元空间替换了永久代?

目录 面试解析 问题答案 面试解析 我们都知道Java8以及以后的版本中,JVM运行时数据区的结构都在慢慢调整和优化。但实际上这些变化,对于业务开发的小伙伴来说,没有任何影响。 因此我可以说,99%的人都回答不出这个问题。 但是…

AI类APP上线需要注意的问题

上线AI类应用程序需要考虑一系列重要问题,以确保应用程序的顺利运行、用户满意度和法规遵从。以下是在上线AI应用程序时需要注意的关键问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。…

目标识别、目标追踪等计算机视觉技术在视频监控领域的应用

随着科技的不断进步和发展,人们的科技意识也在不断提高,人工智能技术也在逐渐改变着人类的生产和生活方式,尤其是在安防监控领域,人工智能技术的落地应用越来越多。 计算机视觉技术是指设备能够“看到”它正在进行的操作&#xf…

【python画画】蘑菇云爱心

来源于网上短视频 数学原理不懂,图个乐 import math from turtle import *def x(i):return 15 * math.sin(i) ** 3 * 20def y(i):return 20 * (12 * math.cos(i) - 5 * math.cos(2 * i) - 2 * math.cos(4 * i))speed(0) color(red) pensize(10) for i in range(51…

安全狗安装

安装waf 关闭apache程序及httpd.exe进程; 运行cmd,cd进入apache/bin文件夹目录, 执行httpd.exe -k install -n apache2.4.39; 启动apache,启动phpstudy 安全狗安装服务名称填写apache2.4.39; 安装安全狗之后就会提示报错 网站防护 可以设备黑白名单 漏…

ChatGLM系列六:基于知识库的问答

1、安装milvus 下载milvus-standalone-docker-compose.yml并保存为docker-compose.yml wget https://github.com/milvus-io/milvus/releases/download/v2.3.2/milvus-standalone-docker-compose.yml -O docker-compose.yml运行milvus sudo docker-compose up -d2、文档预处理…

华为云1核2G2M带宽HECS云服务器价格和性能测评

华为云1核2G2M带宽HECS云服务器优惠价一年51元,高IO_40G系统盘,自带独立公网IP地址,可选北京、乌兰察布、上海和广州地域,华为云1核2G2M带宽服务器适用于小型网站、软件及应用。活动链接:atengyun.com/go/huawei 活动打…

在Win11上部署ChatGLM2-6B详细步骤--(下)开始部署

接上一章《在Win11上部署ChatGLM2-6B详细步骤--(上)准备工作》 这一节我们开始进行ChatGLM2-6B的部署 三:创建虚拟环境 1、找开cmd执行 conda create -n ChatGLM2-6B python3.8 2、激活ChatGLM2-6B conda activate ChatGLM2-6B 3、下载…

echarts将展示全天的数据,如一天的电费,一个停车场一天的饱和度等问题

项目场景: 我们的项目是通过ai识别停车场的停车数,来展示此停车场全天的饱和度,如下 问题描述 后台接口给的数据,就是这种,返回所有有停车数量的时间段,但是我们的x轴要求展示全天的数据,并且可伸缩刻度展示具体时间的停车情况 [{time:2023-10-27 08:20:20,carS…