Software modularity is a software design technique that increases the level to which software is composed of separate interchangeable components called modules. The modules are devised by breaking down the program functions. Each module accomplishes one function and contains all that is necessary to accomplish it. Modules represent a separation of concerns, and improve the maintainability by enforcing logical boundaries between the components. Languages that formally support the module concept include Java, AspectJ, etc. OOP supports modularity, i.e., the source code for an object can be written and maintained independently of the source code for other objects. Once created, an object can be passed around inside the system. When compared to OOP, AOP is more finely grained, making it more functional for software engineering. In OOP, a software module corresponds directly to a block of executable code. Whereas in AOP, a crosscutting concern, can be located in multiple code blocks. This can turn modules into a tangled mess of crosscutting concerns. AOP is a programming paradigm that increases modularity by allowing the separation of cross-cutting concerns. AOP does not replace OOP in the maintenance of the systems but adds certain decomposition features that address the domination of crosscutting concerns. The effectiveness of AOP is illustrated by discussing the logging function in the online shopping catalogue application.