SlideShare a Scribd company logo
1 of 18
Download to read offline
S.Ducasse 1
Stateful Traits
A. Bergel, S. Ducasse, O. Nierstrasz, R.Wuyts
S.Ducasse 2
Roadmap
Traits in a nutshell
Trait limits
Stateful traits
Open questions
Conclusion
S.Ducasse 3
What are Traits?
• Traits are parameterized behaviors
• Traits provide a set of methods
• Traits require a set of methods
• Traits are purely behavioral (Traits do not specify any
state)
TCircle
area
bounds
diameter
hash
...
radius
radius:
center
center:
S.Ducasse 4
Composing Classes out of Traits
Traits are the behavioral building blocks of classes
Class = Superclass + State + Traits + Glue Methods
The composing class retains control of the composition
Object
ColoredCircle
TColor
TCircle
S.Ducasse 5
Composition Rules
Class methods take precedence over trait methods
ColoredCircle
TColor
hue
rgb
draw
ColoredCircle
TColor
hue
rgb
TCircle
draw
radius
drawdraw
TCircle
draw
radius
S.Ducasse 6
Conflicts are explicitly resolved
Override the conflict with a glue method
Aliases provide access to the conflicting methods
Avoid the conflict
Exclude the conflicting method from one trait
ColoredCircle
TColor
hash
TCircle
hashhash -> circleHash
hash
ColoredCircle
TColor
hash
TCircle
hash
hash
hash -> circleHash
hash -> colorHash
S.Ducasse 7
Trait limits
• Trait users should define missing traits state
• Important required methods and required state are
mixed
• Boilerplate glue code
• Propagation of required accessors
S.Ducasse
Example
8
TSyncReadWrite
lockinitialize
syncRead
syncWrite
read
write
lock:
lock
SyncFile
lock
lock:
lock
read
write
SyncStream
lock
lock:
lock
read
write
SyncSocket
lock
lock:
lock
read
write
syncRead
| value |
self lock acquire.
value := self read.
self lock release.
^ value
syncWrite
| value |
self lock acquire.
value := self write.
self lock release.
^ value
Duplicated code
Use of trait
initialize
super initialize.
self lock: Lock new
S.Ducasse
Stateful traits
• Instance variables are per default private to the trait
• Via composition
• Client classes may get access to state
• Client classes may merge the accessed state
9
S.Ducasse
By default state is private
10
T1
getXT1
setXT1:
x
T2
getXT2
setXT2:
x
C
getX
setX:
x
c := C new.
c setXT1: 1.
c setXT2: 2.
c setX: 3.
{ Now:
c getXT1 = 1
c getXT2 = 2
c getX = 3 }
S.Ducasse
But can be accessed
11
@@{ xFromT1 -> x }
T1
getXT1
setXT1:
x
@@{ xFromT2 -> x }
c := C new.
c setXT1: 1.
c setXT2: 2.
{ Now:
c getXT1 = 1
c getXT2 = 2
c sum = 3 }
sum
^ xFromT1 + xFromT2
T2
getXT2
setXT2:
x
sum
C
S.Ducasse
And merged
12
T1
getX
setX:
x
T2
getY
setY:
y
C
getW
setW:
@@{w -> x}
@@{w -> y}
c := C new.
c setW: 3.
{ Now:
c getX = 3
c getY = 3
c getW = 3 }
S.Ducasse
An example
13
SyncStream
isBusy
hash
TSyncReadWrite
lock
initialize
syncRead
syncWrite
hash
read
write
@{hashFromSync -> hash}
@@{syncLock -> lock}
TStream
read
write
hash
@{hashFromStream -> hash}
syncRead
| value |
lock acquire.
value := self read.
lock release.
^ value
syncWrite
| value |
lock acquire.
value := self write.
lock release.
^ value
isBusy
^ syncLock isAcquired
hash
^ self hashFromSync
bitAnd: self hashFromStream
initialize
super initialize.
lock := Lock new
Uses trait
Trait Name
provided
methods
required
methods
S.Ducasse
Analysis
• Stateless traits are just a special case of stateful traits
• No accessor required
• No boiler plate code
• Trait can be “complete”
• Flattening property can be rescued using instance
variable mangling
14
S.Ducasse
A word of implementation
15
T1
x, y, z
getX
T2
v, x
getV
T4
Memory layout
Model
T4
getX
^ x
getV
^ v
@@ { v -> y }
@@ { v -> v }
T1.x val1
T1.y, T2.v val2
T1.z val3
T2.x val4
S.Ducasse
Open Questions
• Do we really need merge?
• Do we need stateful traits if we get private methods?
16
S.Ducasse
Conclusion
• Traits and state reconciled
• Traits are complete
• State is private but can be made accessible at
composition time
17
S.Ducasse 18
Flattening Property
The semantics of a method does not depend of whether
it is defined in a trait or in a class that uses the trait
ColoredCircle
TColor
TCircle
draw
rgb
draw
hue
radius
Object
ColoredCircle
Object
rgb
hue
radius
draw
equivalent
Structured view Flat view

More Related Content

What's hot

Special Right Triangles
Special Right TrianglesSpecial Right Triangles
Special Right Triangles
Fidelfo Moral
 
Example Two - Evaluate a Composite Function
Example Two - Evaluate a Composite FunctionExample Two - Evaluate a Composite Function
Example Two - Evaluate a Composite Function
maddie271
 
Assignment grouping 2(bungee jumping) (edit)
Assignment grouping 2(bungee jumping) (edit)Assignment grouping 2(bungee jumping) (edit)
Assignment grouping 2(bungee jumping) (edit)
Eqah Ihah
 

What's hot (20)

Standard deviation
Standard deviationStandard deviation
Standard deviation
 
Special Right Triangles
Special Right TrianglesSpecial Right Triangles
Special Right Triangles
 
Example Two - Evaluate a Composite Function
Example Two - Evaluate a Composite FunctionExample Two - Evaluate a Composite Function
Example Two - Evaluate a Composite Function
 
Example 2
Example 2Example 2
Example 2
 
Exampl
ExamplExampl
Exampl
 
4.11.2 Special Right Triangles
4.11.2 Special Right Triangles4.11.2 Special Right Triangles
4.11.2 Special Right Triangles
 
Assignment grouping 2(bungee jumping) (edit)
Assignment grouping 2(bungee jumping) (edit)Assignment grouping 2(bungee jumping) (edit)
Assignment grouping 2(bungee jumping) (edit)
 
Linear Regression
Linear RegressionLinear Regression
Linear Regression
 
Ch07b entropy
Ch07b entropyCh07b entropy
Ch07b entropy
 
Microscopic Mechanisms of Superconducting Flux Quantum and Superconducting an...
Microscopic Mechanisms of Superconducting Flux Quantum and Superconducting an...Microscopic Mechanisms of Superconducting Flux Quantum and Superconducting an...
Microscopic Mechanisms of Superconducting Flux Quantum and Superconducting an...
 
W2 Example 4 Answers
W2 Example 4 AnswersW2 Example 4 Answers
W2 Example 4 Answers
 
Lo 1
Lo 1Lo 1
Lo 1
 
Learning object 1
Learning object 1Learning object 1
Learning object 1
 
Recurrence relation
Recurrence relationRecurrence relation
Recurrence relation
 
Permutations 2020
Permutations 2020Permutations 2020
Permutations 2020
 
Raj
RajRaj
Raj
 
surekha1
surekha1surekha1
surekha1
 
Statistics formula
Statistics formulaStatistics formula
Statistics formula
 
Distance Between Two Points.pptx
Distance Between Two Points.pptxDistance Between Two Points.pptx
Distance Between Two Points.pptx
 
Cramer row inequality
Cramer row inequality Cramer row inequality
Cramer row inequality
 

Viewers also liked (9)

Starting fresh every morning
Starting fresh every morningStarting fresh every morning
Starting fresh every morning
 
Gstreamer
GstreamerGstreamer
Gstreamer
 
TypePlug -- Practical, Pluggable Types
TypePlug -- Practical, Pluggable TypesTypePlug -- Practical, Pluggable Types
TypePlug -- Practical, Pluggable Types
 
The Reflectivity
The ReflectivityThe Reflectivity
The Reflectivity
 
News from Squeak
News from SqueakNews from Squeak
News from Squeak
 
SCL
SCLSCL
SCL
 
Glass
GlassGlass
Glass
 
Modular ObjectLens
Modular ObjectLensModular ObjectLens
Modular ObjectLens
 
Spyware-ridden software development
Spyware-ridden software developmentSpyware-ridden software development
Spyware-ridden software development
 

Similar to Stateful Traits

CLIQUE Automatic subspace clustering of high dimensional data for data mining...
CLIQUE Automatic subspace clustering of high dimensional data for data mining...CLIQUE Automatic subspace clustering of high dimensional data for data mining...
CLIQUE Automatic subspace clustering of high dimensional data for data mining...
Raed Aldahdooh
 
Developing Expert Voices
Developing Expert VoicesDeveloping Expert Voices
Developing Expert Voices
suzanne
 
Trig substitution
Trig substitutionTrig substitution
Trig substitution
dynx24
 
Calculus 08 techniques_of_integration
Calculus 08 techniques_of_integrationCalculus 08 techniques_of_integration
Calculus 08 techniques_of_integration
tutulk
 
Introdution to differential forms
Introdution to differential formsIntrodution to differential forms
Introdution to differential forms
Dunga Pessoa
 
New data structures and algorithms for \\post-processing large data sets and ...
New data structures and algorithms for \\post-processing large data sets and ...New data structures and algorithms for \\post-processing large data sets and ...
New data structures and algorithms for \\post-processing large data sets and ...
Alexander Litvinenko
 
Related rates ppt
Related rates pptRelated rates ppt
Related rates ppt
Ron Eick
 

Similar to Stateful Traits (20)

Cs345 cl
Cs345 clCs345 cl
Cs345 cl
 
Integer_Functions .pdf
Integer_Functions .pdfInteger_Functions .pdf
Integer_Functions .pdf
 
A Comparison Of Methods For Solving MAX-SAT Problems
A Comparison Of Methods For Solving MAX-SAT ProblemsA Comparison Of Methods For Solving MAX-SAT Problems
A Comparison Of Methods For Solving MAX-SAT Problems
 
CLIQUE Automatic subspace clustering of high dimensional data for data mining...
CLIQUE Automatic subspace clustering of high dimensional data for data mining...CLIQUE Automatic subspace clustering of high dimensional data for data mining...
CLIQUE Automatic subspace clustering of high dimensional data for data mining...
 
Developing Expert Voices
Developing Expert VoicesDeveloping Expert Voices
Developing Expert Voices
 
Trig substitution
Trig substitutionTrig substitution
Trig substitution
 
Advance algebra
Advance algebraAdvance algebra
Advance algebra
 
Calculus 08 techniques_of_integration
Calculus 08 techniques_of_integrationCalculus 08 techniques_of_integration
Calculus 08 techniques_of_integration
 
Joint blind calibration and time-delay estimation for multiband ranging
Joint blind calibration and time-delay estimation for multiband rangingJoint blind calibration and time-delay estimation for multiband ranging
Joint blind calibration and time-delay estimation for multiband ranging
 
Ordinary Differential Equation
Ordinary Differential EquationOrdinary Differential Equation
Ordinary Differential Equation
 
Rand final
Rand finalRand final
Rand final
 
Introdution to differential forms
Introdution to differential formsIntrodution to differential forms
Introdution to differential forms
 
Hierarchical matrices for approximating large covariance matries and computin...
Hierarchical matrices for approximating large covariance matries and computin...Hierarchical matrices for approximating large covariance matries and computin...
Hierarchical matrices for approximating large covariance matries and computin...
 
CALCULUS 2.pptx
CALCULUS 2.pptxCALCULUS 2.pptx
CALCULUS 2.pptx
 
New data structures and algorithms for \\post-processing large data sets and ...
New data structures and algorithms for \\post-processing large data sets and ...New data structures and algorithms for \\post-processing large data sets and ...
New data structures and algorithms for \\post-processing large data sets and ...
 
“Electric Flux Density & Applications3.1.-converted.pptx
“Electric Flux Density & Applications3.1.-converted.pptx“Electric Flux Density & Applications3.1.-converted.pptx
“Electric Flux Density & Applications3.1.-converted.pptx
 
AJMS_384_22.pdf
AJMS_384_22.pdfAJMS_384_22.pdf
AJMS_384_22.pdf
 
Related rates ppt
Related rates pptRelated rates ppt
Related rates ppt
 
Ppt
PptPpt
Ppt
 
Presentation on Numerical Method (Trapezoidal Method)
Presentation on Numerical Method (Trapezoidal Method)Presentation on Numerical Method (Trapezoidal Method)
Presentation on Numerical Method (Trapezoidal Method)
 

More from ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
ESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
ESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
ESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
ESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
ESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
ESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
ESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
ESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
ESUG
 

More from ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Recently uploaded

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Recently uploaded (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 

Stateful Traits