面向对象和基于对象

本文探讨了面向对象编程的优缺点,以及为何基于对象的编程方式逐渐受到青睐。在面向对象中,封装、继承和多态是核心特性,而在基于对象中,对象间的组合替代了继承,但可能导致性能下降和可读性降低。通过线程类的实例,展示了两种编程范式的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

基于对象是从面向对象演变过来的, 面向对象已经诞生了这么长时间,为什么现在基于对象会越来越收欢迎呢?

“成也萧何,败也萧何”

为了解释这个问题,就不得不提到面向对象的三大特征:封装、继承、多态。

这些带来的好处:易维护、质量好、效率高、易扩展、易复用。
同时也带来了很大的坏处: 复杂

但是,在现代的编程语言发展至今,有一个明显的趋势,就是动态化和脚本化。我们可以发现最新兴起的语言,绝大多数都脚本语言,比如Ruby/Lua/Python,而C++语言的新规范,也更多的倾向动态类型推断和lamda表达式(动态函数)。所以面向对象编程概念的发展,也进入了一个更动态化,更脚本化的新时代——基于对象。



封装

在面向对象的过程中,我们把一些逻辑功能和实现其对应功能的属性封装为一个类。

在基于对象中,把所有的在面向对象中的类称为对象,所以在基于对象中,不存在类这个概念。

而且在基于对象中,函数的类型就统一为 function<>,通过回调来实现对应的功能。


继承

面向对象的过程中,我们为了增加代码的复用性,增强了程序的维护性。

在基于对象的过程中,对象之间通过相互组合来"实现"面向对象过程中的继承。


基于对象的缺点

  • 从性能角度上来说: 对象之间组合实现的继承的性能是比不上面向对象中继承的性能。

  • 所有的函数变量额类型统一后,无法在编译器做任何形式的检查。

  • 面向对象中的类类型可读性比较好, 而在基于对象中,函数的类型统一为 function<>,没有任何的可读语义,理解代码比较困难。


举个实例:如果我们需要写一个线程类。


面向对象的手法

先写一个线程基类,然后在子类中实现 run() 函数, 子类调用 父类的start, start 调用 runThread,
runThread 回调 子类实现的 run() 函数 实现具体功能。

baseThread.h

#ifndef BASETHREAD_H_
#define BASETHREAD_H_

#include <pthread.h>


class BaseThread{
   
   

public:
	BaseThread();
	virtual ~BaseThread();

	void start();
	void join();

private:

	static void* runThread(void* arg);
	virtual void run() = 0;

	pthread_t m_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值