SlideShare a Scribd company logo
1 of 47
Download to read offline
OO SOLID
Applying SOLID principles to improve object-oriented designs
Say we have a mechanic
shop...
ServiceOrder

AddPart(Part)
Total()

1..*
Part
Name
Price
!
public class Part

{

private decimal price;



public Part(string name, decimal price)

{

this.price = price;

}



public decimal Price

{

get { return price; }

set { price = value; }

}



}
!
public class ServiceOrder {

private List<Part> parts;



public ServiceOrder() {

parts = new List<Part>();

}



public void AddPart(Part part) {

parts.Add(part);

}



public decimal Total() {

decimal total = 0;

foreach (Part aPart in parts) {

total += aPart.Price;

}

return total;

}

}
Now we want to specify additional
quantities of each part.	

(because we are lazy)
ServiceOrder
partsAndQtys : Dictionary
AddPart(Part)
Total()

1..*
Part
Name
Price
!

public class ServiceOrder

{

private Dictionary<Part, int> partsAndQuantities;




public ServiceOrder() {

partsAndQuantities = new Dictionary<Part, int>();

}



public void AddPart(Part part) {

this.AddPart(part, 1);

}



public void AddPart(Part part, int quantity) {

int currentQuantity = 0;

if (partsAndQuantities.ContainsKey(part)) {

currentQuantity = partsAndQuantities[part];

}

int newQuantity = currentQuantity + quantity;

partsAndQuantities.Add(part, newQuantity);

}



public decimal Total() {

decimal total = 0;

foreach (Part aPart in partsAndQuantities.Keys) {

int quantity = partsAndQuantities[aPart];

total += aPart.Price * quantity;

}

return total;

}

}
ServiceOrder

AddPart(Part, Qty)
Total()
1

1..*
LineItem
Part
Quantity

Part
*

1

Name
Price
!
public class LineItem

{

private Part part;



private int quantity;



public LineItem(Part part, int quantity) {

this.part = part;

this.quantity = quantity;

}



public Part Part {

get { return part; }

}



public int Quantity {

get { return quantity; }

private set { quantity = value; }

}

}
public class ServiceOrder

{

private List<LineItem> lineItems;



public ServiceOrder() {

lineItems = new List<LineItem>();

}



public void AddPart(Part part) {

this.AddPart(part, 1);

}



public void AddPart(Part part, int quantity) {

LineItem lineItem = new LineItem(part, quantity);

lineItems.Add(lineItem);

}



public decimal Total() {

decimal total = 0;

foreach (LineItem aLineItem in lineItems) {

total += aLineItem.Part.Price * aLineItem.Quantity;

}



return total;

}

}
S ingle Responsibility Principle
Now we want to add a markup
for each part.	

(because we want to track
profit margin)
ServiceOrder

AddPart(Part, Qty)
Total()
1

1..*
Part

LineItem
Part
Quantity

*

1

Name
MarkupPercentage
WholesalePrice
!

public class Part

{

private string name;

private decimal wholesalePrice;

private int markupPercentage;




public Part(string name, decimal price) :this(name, price, 0)

{}



public Part(string name, decimal price, int markupPercentage) {

this.name = name;

this.wholesalePrice = price;

this.markupPercentage = markupPercentage;

}



public string Name {

get { return name; }

}



public decimal WholesalePrice {

get { return wholesalePrice; }

}



public int MarkupPercentage {

get { return markupPercentage; }

}

}
!

public class ServiceOrder

{

private List<LineItem> lineItems;




public ServiceOrder() {

lineItems = new List<LineItem>();

}



public void AddPart(Part part) {

this.AddPart(part, 1);

}



public void AddPart(Part part, int additionalQuantity) {

LineItem lineItem = new LineItem(part, additionalQuantity);

lineItems.Add(lineItem);

}



public decimal Total() {

decimal total = 0;

foreach (LineItem aLineItem in lineItems) {

total += aLineItem.Part.WholesalePrice

* (aLineItem.Part.MarkupPercentage/100m + 1)

* aLineItem.Quantity;

}

return total;

}

}
ServiceOrder

AddPart(Part, Qty)
Total()
1

1..*
Part

LineItem
Part
Quantity
LineTotal()

*

1

Name
MarkupPercentage
WholesalePrice
!
// New methods in the Part class	


public decimal Price {

get { return wholesalePrice * MarkupMultiplier(); }

}


!
private decimal MarkupMultiplier() {

return (markupPercentage / 100m + 1);

}	

!
!




// And one in the LineItem class



public decimal LineTotal() {

return part.Price * quantity;

}
!
// In the ServiceOrder class...



public decimal Total() {



decimal total = 0;

foreach (LineItem aLineItem in lineItems) {

total += aLineItem.LineTotal();

}

return total;




}
O pen/Closed Principle
Now we want to add labor costs.	

(because we want to 	

make more money)
Part
Name
MarkupPercentage
WholesalePrice
Price()
Part
Name
MarkupPercentage
WholesalePrice

Labor
Price
Price()
!
public class Labor : Part

{

public Labor(string name, decimal price)	
: base(name, price)	
{}

}



Item
Name
CalculatePrice()

Labor
Price
CalculatePrice()

Part
MarkupPercentage
WholesalePrice
CalculatePrice()
!
public interface Item

{

string Name { get; }

decimal CalculatePrice();

}
L iskov Substitution Principle
Now we want to generate
receipts.	

(because we want to	

seem professionalish)
Presentation Layer

Business Layer

ReceiptGenerator

ServiceOrder

PrintReceipt()

AddPart(Part, Qty)
Total()
!
public class ReceiptGenerator

{

private FixItMechanicsSystem system;

private EpsonTMT88IVPrinter epsonTMT88IVPrinter;

private string initString = "sasllkslsl398383fa";	


public void PrintReceipt() {

ServiceOrder order = system.FinalizeOrder();	


string receiptString = "Total........ $" + order.Total();

epsonTMT88IVPrinter.Initialize(initString);

epsonTMT88IVPrinter.PrintBwMed239(receiptString);

epsonTMT88IVPrinter.Flush();	
}

}
Presentation Layer
ReceiptGenerator

PrintReceipt()

Business Layer
Receipt

Total()

ServiceOrder

AddPart(Part, Qty)
Total()


// In the ReciptGenerator class.



public void PrintReceipt() {

IReceipt receipt = system.FinalizeOrder();	


string receiptString = "Total........ $" + receipt.Total();

epsonTMT88IVPrinter.Initialize(initString);

epsonTMT88IVPrinter.PrintBwMed239(receiptString);

epsonTMT88IVPrinter.Flush();

}
I nterface Segregation Principle
We need to print to a new
printer.	

(because we’re growing and they
don’t make the old one anymore)
ReceiptGenerator

PrintReceipt()

EpsonT88IVPrinter
1

Initialize(String)
PrintBwMed239(String)
Flush()
!
public class ReceiptGenerator

{

private FixItMechanicsSystem system;

private EpsonTMT88IV epsonTMT88IVPrinter;

private string initString = "sasllkslsl398383fa";	


public void PrintReceipt() {

Receipt receipt = system.FinalizeOrder();	


string receiptString = "Total........ $" + receipt.Total();

epsonTMT88IVPrinter.Initialize(initString);

epsonTMT88IVPrinter.PrintBwMed239(receiptString);

epsonTMT88IVPrinter.Flush();	
}

}
ReceiptGenerator

PrintReceipt()

EpsonPrinterAdapter

1
EpsonT88IVPrinter

1

GenericPrinter

Print(String)

SamsungPrinterAdapter

1
SamsungSRP350

Initialize(String)

Initialize(String)

PrintBwMed239(String)

ProcessPages(String)

Flush()


public class ReceiptGenerator

{

private FixItMechanicsSystem system;

private IGenericPrinter printer;



public void PrintReceipt() {

Receipt receipt = system.FinalizeOrder();

string receiptString = "Total........ $" + receipt.Total();

printer.Print(receiptString);

}

}


public class EpsonPrinterAdapter : IGenericPrinter

{

private EpsonTMT88IV epsonTMT88IVPrinter;

private string initString = "sasllkslsl398383fa";



public void Print(string printString) {

epsonTMT88IVPrinter.Initialize(initString);

epsonTMT88IVPrinter.PrintBwMed239(printString);

epsonTMT88IVPrinter.Flush();

}

}


public class SamsungPrinterAdapter : IGenericPrinter

{

private SamsungSRP350 samsungSRP350Printer;

private string initString = "aksreiufgu";



public void Print(string printString) {

samsungSRP350Printer.Init(initString);

samsungSRP350Printer.ProcessPages(printString);

}

}
D ependency Inversion Principle
S ingle Responsibility Principle
O pen/Closed Principle
L iskov Substitution Principle
I nterface Segregation Principle
D ependency Inversion Principle
Questions?
X
Poor
Design

• Duplication
• Ambiguity
• Complexity
✓
Good
Design

✓ Low Coupling
✓ High Cohesion
Questions?

More Related Content

What's hot

Functions in C++
Functions in C++Functions in C++
Functions in C++home
 
Javascript function
Javascript functionJavascript function
Javascript functionLearningTech
 
The Ring programming language version 1.5.3 book - Part 21 of 184
The Ring programming language version 1.5.3 book - Part 21 of 184The Ring programming language version 1.5.3 book - Part 21 of 184
The Ring programming language version 1.5.3 book - Part 21 of 184Mahmoud Samir Fayed
 
Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...Codemotion
 
C++ Function
C++ FunctionC++ Function
C++ FunctionHajar
 
The Ring programming language version 1.5.4 book - Part 21 of 185
The Ring programming language version 1.5.4 book - Part 21 of 185The Ring programming language version 1.5.4 book - Part 21 of 185
The Ring programming language version 1.5.4 book - Part 21 of 185Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 28 of 210
The Ring programming language version 1.9 book - Part 28 of 210The Ring programming language version 1.9 book - Part 28 of 210
The Ring programming language version 1.9 book - Part 28 of 210Mahmoud Samir Fayed
 
Call by value or call by reference in C++
Call by value or call by reference in C++Call by value or call by reference in C++
Call by value or call by reference in C++Sachin Yadav
 
The Ring programming language version 1.5 book - Part 4 of 31
The Ring programming language version 1.5 book - Part 4 of 31The Ring programming language version 1.5 book - Part 4 of 31
The Ring programming language version 1.5 book - Part 4 of 31Mahmoud Samir Fayed
 
LinkedIn TBC JavaScript 100: Functions
 LinkedIn TBC JavaScript 100: Functions LinkedIn TBC JavaScript 100: Functions
LinkedIn TBC JavaScript 100: FunctionsAdam Crabtree
 
The Ring programming language version 1.7 book - Part 25 of 196
The Ring programming language version 1.7 book - Part 25 of 196The Ring programming language version 1.7 book - Part 25 of 196
The Ring programming language version 1.7 book - Part 25 of 196Mahmoud Samir Fayed
 
Reference Parameter, Passing object by reference, constant parameter & Defaul...
Reference Parameter, Passing object by reference, constant parameter & Defaul...Reference Parameter, Passing object by reference, constant parameter & Defaul...
Reference Parameter, Passing object by reference, constant parameter & Defaul...Meghaj Mallick
 
Lecture#6 functions in c++
Lecture#6 functions in c++Lecture#6 functions in c++
Lecture#6 functions in c++NUST Stuff
 
C++ functions presentation by DHEERAJ KATARIA
C++ functions presentation by DHEERAJ KATARIAC++ functions presentation by DHEERAJ KATARIA
C++ functions presentation by DHEERAJ KATARIADheeraj Kataria
 
Chapter12 array-single-dimension
Chapter12 array-single-dimensionChapter12 array-single-dimension
Chapter12 array-single-dimensionDeepak Singh
 
The Ring programming language version 1.7 book - Part 24 of 196
The Ring programming language version 1.7 book - Part 24 of 196The Ring programming language version 1.7 book - Part 24 of 196
The Ring programming language version 1.7 book - Part 24 of 196Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 22 of 180
The Ring programming language version 1.5.1 book - Part 22 of 180The Ring programming language version 1.5.1 book - Part 22 of 180
The Ring programming language version 1.5.1 book - Part 22 of 180Mahmoud Samir Fayed
 

What's hot (20)

Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Javascript function
Javascript functionJavascript function
Javascript function
 
The Ring programming language version 1.5.3 book - Part 21 of 184
The Ring programming language version 1.5.3 book - Part 21 of 184The Ring programming language version 1.5.3 book - Part 21 of 184
The Ring programming language version 1.5.3 book - Part 21 of 184
 
Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...
 
C++ Function
C++ FunctionC++ Function
C++ Function
 
Array and functions
Array and functionsArray and functions
Array and functions
 
The Ring programming language version 1.5.4 book - Part 21 of 185
The Ring programming language version 1.5.4 book - Part 21 of 185The Ring programming language version 1.5.4 book - Part 21 of 185
The Ring programming language version 1.5.4 book - Part 21 of 185
 
The Ring programming language version 1.9 book - Part 28 of 210
The Ring programming language version 1.9 book - Part 28 of 210The Ring programming language version 1.9 book - Part 28 of 210
The Ring programming language version 1.9 book - Part 28 of 210
 
C++ functions
C++ functionsC++ functions
C++ functions
 
Call by value or call by reference in C++
Call by value or call by reference in C++Call by value or call by reference in C++
Call by value or call by reference in C++
 
The Ring programming language version 1.5 book - Part 4 of 31
The Ring programming language version 1.5 book - Part 4 of 31The Ring programming language version 1.5 book - Part 4 of 31
The Ring programming language version 1.5 book - Part 4 of 31
 
LinkedIn TBC JavaScript 100: Functions
 LinkedIn TBC JavaScript 100: Functions LinkedIn TBC JavaScript 100: Functions
LinkedIn TBC JavaScript 100: Functions
 
C++ functions
C++ functionsC++ functions
C++ functions
 
The Ring programming language version 1.7 book - Part 25 of 196
The Ring programming language version 1.7 book - Part 25 of 196The Ring programming language version 1.7 book - Part 25 of 196
The Ring programming language version 1.7 book - Part 25 of 196
 
Reference Parameter, Passing object by reference, constant parameter & Defaul...
Reference Parameter, Passing object by reference, constant parameter & Defaul...Reference Parameter, Passing object by reference, constant parameter & Defaul...
Reference Parameter, Passing object by reference, constant parameter & Defaul...
 
Lecture#6 functions in c++
Lecture#6 functions in c++Lecture#6 functions in c++
Lecture#6 functions in c++
 
C++ functions presentation by DHEERAJ KATARIA
C++ functions presentation by DHEERAJ KATARIAC++ functions presentation by DHEERAJ KATARIA
C++ functions presentation by DHEERAJ KATARIA
 
Chapter12 array-single-dimension
Chapter12 array-single-dimensionChapter12 array-single-dimension
Chapter12 array-single-dimension
 
The Ring programming language version 1.7 book - Part 24 of 196
The Ring programming language version 1.7 book - Part 24 of 196The Ring programming language version 1.7 book - Part 24 of 196
The Ring programming language version 1.7 book - Part 24 of 196
 
The Ring programming language version 1.5.1 book - Part 22 of 180
The Ring programming language version 1.5.1 book - Part 22 of 180The Ring programming language version 1.5.1 book - Part 22 of 180
The Ring programming language version 1.5.1 book - Part 22 of 180
 

Similar to Applying SOLID Principles

Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy codeShriKant Vashishtha
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In JavaAndrei Solntsev
 
Flink Batch Processing and Iterations
Flink Batch Processing and IterationsFlink Batch Processing and Iterations
Flink Batch Processing and IterationsSameer Wadkar
 
Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...Mario Fusco
 
Dti2143 chapter 5
Dti2143 chapter 5Dti2143 chapter 5
Dti2143 chapter 5alish sha
 
Pragmatic functional refactoring with java 8
Pragmatic functional refactoring with java 8Pragmatic functional refactoring with java 8
Pragmatic functional refactoring with java 8RichardWarburton
 
COMP360 Assembler Write an assembler that reads the source code of an.pdf
COMP360 Assembler Write an assembler that reads the source code of an.pdfCOMP360 Assembler Write an assembler that reads the source code of an.pdf
COMP360 Assembler Write an assembler that reads the source code of an.pdffazalenterprises
 
Creating a Facebook Clone - Part XXIX - Transcript.pdf
Creating a Facebook Clone - Part XXIX - Transcript.pdfCreating a Facebook Clone - Part XXIX - Transcript.pdf
Creating a Facebook Clone - Part XXIX - Transcript.pdfShaiAlmog1
 
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdfCreat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdfaromanets
 
RECURSION IN C
RECURSION IN C RECURSION IN C
RECURSION IN C v_jk
 
Recursion in C
Recursion in CRecursion in C
Recursion in Cv_jk
 

Similar to Applying SOLID Principles (20)

Array Cont
Array ContArray Cont
Array Cont
 
Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy code
 
25-functions.ppt
25-functions.ppt25-functions.ppt
25-functions.ppt
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In Java
 
Flink Batch Processing and Iterations
Flink Batch Processing and IterationsFlink Batch Processing and Iterations
Flink Batch Processing and Iterations
 
Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...
 
Functions
FunctionsFunctions
Functions
 
function_v1.ppt
function_v1.pptfunction_v1.ppt
function_v1.ppt
 
function_v1.ppt
function_v1.pptfunction_v1.ppt
function_v1.ppt
 
Function in c
Function in cFunction in c
Function in c
 
Dti2143 chapter 5
Dti2143 chapter 5Dti2143 chapter 5
Dti2143 chapter 5
 
Pragmatic functional refactoring with java 8
Pragmatic functional refactoring with java 8Pragmatic functional refactoring with java 8
Pragmatic functional refactoring with java 8
 
COMP360 Assembler Write an assembler that reads the source code of an.pdf
COMP360 Assembler Write an assembler that reads the source code of an.pdfCOMP360 Assembler Write an assembler that reads the source code of an.pdf
COMP360 Assembler Write an assembler that reads the source code of an.pdf
 
Refactoring
RefactoringRefactoring
Refactoring
 
Monads in Swift
Monads in SwiftMonads in Swift
Monads in Swift
 
Creating a Facebook Clone - Part XXIX - Transcript.pdf
Creating a Facebook Clone - Part XXIX - Transcript.pdfCreating a Facebook Clone - Part XXIX - Transcript.pdf
Creating a Facebook Clone - Part XXIX - Transcript.pdf
 
Function in c
Function in cFunction in c
Function in c
 
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdfCreat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
 
RECURSION IN C
RECURSION IN C RECURSION IN C
RECURSION IN C
 
Recursion in C
Recursion in CRecursion in C
Recursion in C
 

Recently uploaded

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Recently uploaded (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

Applying SOLID Principles