Team Members: Spriha Mandal, Arjyahi Bhattacharya, Arunava Ghosh
This project showcases various Object-Oriented Design Anti-Patterns, their characteristics, and examples. It's an educational tool designed to help developers understand common pitfalls in OOAD and how to avoid them.
- Examples of common OOAD anti-patterns.
- Illustrations of the impact of these patterns on maintainability, readability, and scalability.
- Code snippets showcasing how these anti-patterns manifest.
Ensure you have the following installed:
-
Clone the repository:
git clone https://github.com/spriha27/OOAD-GradProject-AntiPatterns.git cd OOAD-GradProject-AntiPatterns -
Build the project:
./gradlew clean build
Each anti-pattern example is located under src/main/java/code/<anti-pattern-name>. Some anti-patterns have standalone Java files, while others are organized into subdirectories. Follow the instructions below to run specific examples:
Path: src/main/java/code/cargocultprogramming/
- Examples:
NetworkConfigExample,OrderServiceExample,TryCatchExample - Run:
java -cp build/libs/app.jar code.cargocultprogramming.<ExampleName>
Path: src/main/java/code/dataclass/
- Examples:
Transaction,Product,Invoice,Employee,Customer - Run:
java -cp build/libs/app.jar code.dataclass.<ExampleName>
Path: src/main/java/code/excessiveinheritance/
- Examples:
UtilityExample,MultiFunctionDevice,EmployeeExample,ElectricCar,BirdExample - Run:
java -cp build/libs/app.jar code.excessiveinheritance.<ExampleName>
Path: src/main/java/code/godobject/
- Subfolders:
applicationcontrollerdatamanagerordermanagershoppingcartutility
- Examples:
UtilityMain(inutilityfolder) - Run:
java -cp build/libs/app.jar code.godobject.utility.UtilityMain
Path: src/main/java/code/goldenhammer/
-
Subfolders:
oopoveruseproductsingleton
-
Examples:
singleton.Application,product.ECommerceApplication,oopoveruse.DocumentViewer -
Run:
java -cp build/libs/app.jar code.goldenhammer.<ExampleName>
Path: src/main/java/code/lavaflow/
- Examples:
UserAccount,RequestProcessor,PaymentHandler,NewProcessor - Run:
java -cp build/libs/app.jar code.lavaflow.<ExampleName>
Path: src/main/java/code/overcomplicatedobject/
- Examples:
Shape,Product,Car,AnimalSound,Animal - Run:
java -cp build/libs/app.jar code.overcomplicatedobject.<ExampleName>
Path: src/main/java/code/primitiveobsession/
- Subfolders:
useremailproductmoneycustomercontactphone
- Examples:
User,Product,Customer,Contact - Run:
java -cp build/libs/app.jar code.primitiveobsession.<ExampleName>
Path: src/main/java/code/spaghetti/
- Examples:
UserManagement,PaymentProcessor,OrderService,DiscountCalculator,Calculator - Run:
java -cp build/libs/app.jar code.spaghetti.<ExampleName>
Path: src/main/java/code/squarewheel/
- Examples:
ThreadPoolExample,LoggingExample,DateExample,ArrayListExample - Run:
java -cp build/libs/app.jar code.squarewheel.<ExampleName>
Path: src/main/java/code/violationofencapsulation/
- Examples: Specific examples are located directly in the folder.
- Run:
java -cp build/libs/app.jar code.violationofencapsulation.<ExampleName>
Replace <ExampleName> with the class name you want to run. Each anti-pattern contains explanatory comments within the code for better understanding.