Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于OOP与AOP的特点与应用思想的一些思考 #81

Open
zzh2021010869 opened this issue Jun 14, 2022 · 0 comments
Open

关于OOP与AOP的特点与应用思想的一些思考 #81

zzh2021010869 opened this issue Jun 14, 2022 · 0 comments

Comments

@zzh2021010869
Copy link

    黄老师课上讲过,我们所学的OOP(Object Oriented Programming)以对象为中心,以对象模型为基础进行的本质化抽象。他可以搭建大型的复杂系统。它可以以某种方式进行代码的多态执行,可以将多个模块进行抽象化为统一结构,可以封装便于调用、操作与分析;容易扩展,代码重用率高,可继承,可覆盖;实现简单,可有效地减少程序的维护工作量。

    然而在学习的过程中,发现与抽象统一性相对的是具体实现性,当使用oop思想进行抽象的过程中,就降低了与底层代码的交互,因此不适合底层开发和游戏开发,甚至是多媒体开发;同时对于某些过程对于事务开发而言,事务本身是面向过程的,过度的封装导致事务本身的复杂性提高。比如说有两个类互相独立,但我们需要在每个方法中做日志,因此需要在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。或者当你想要使用大量继承的时候(老师上课不推荐使用),每次添加都需要重新理解该继承系统,减少了代码的复杂性而提高了理解的复杂性。

   学生在学习的过程中了解到了AOP(Aspect Oriented Programming)即面对切面的编程这一概念。作为OOP的延申,AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。这就降低了模块的耦合度;使系统容易扩展;具有更好的代码复用性。

    这个提取技术就是“横切”。剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

    (具体思想与实现方法参考https://www.cnblogs.com/wayfarer/articles/241024.html)
   但是学生又了解到AOP思想主要在Java spring中应用。那我们能否在C++中构建一个AOP的框架呢?下面列举三篇文章中的构建方式。
    https://www.cnblogs.com/kaleidopink/p/13871130.html(这个AOP框架一个最大的问题就是其核心代码的参数和切面的参数必须保持一致,这就导致缺少了很多实用价值,但是可以作为例子勘探思想)
    https://blog.csdn.net/SkySuperWL/article/details/52200232
    https://www.cnblogs.com/qicosmos/p/4772389.html(支持切面组合,不要求切面必须派生于某个基类,不用虚函数调用,性能更好,功能更强大)
   这些可以作为一个理解AOP思维的参考。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant