Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
exercises
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ISC2
oop
exercises
Commits
e0df49de
Commit
e0df49de
authored
1 year ago
by
iliya
Browse files
Options
Downloads
Patches
Plain Diff
feat: ex1 serie2 finished
parent
07b53bfa
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
serie2/ex1.md
+57
-0
57 additions, 0 deletions
serie2/ex1.md
with
57 additions
and
0 deletions
serie2/ex1.md
0 → 100644
+
57
−
0
View file @
e0df49de
---
lang
:
fr
---
# Cohérence
La classe proposée ci-dessous permet de créer un compte bancaire : Une règle de
cohérence voudrait qu'un compte soit en tout temps positif ou égal à zéro.
Trouvez 3 exemples d'utilisations qui permettent de corrompre l'état d'un compte
bancaire et proposez une solution pour éviter ce genre de problème.
```
java
public
class
Account
{
// Le champ amount est publique ce qui signifique que sa valeur peut être
// modifiée en "dur" à tout moment => ceci doit être impossible.
// Solution: rendre le champ privé
public
int
amount
;
private
String
owner
;
// Le constructeur accepte et ne vérifie aucunement si la valeur de l'amount
// est négative => ceci doit être impossible
// Solution: faire une vérification à l'intérieur du constructeur de la valeur
// passé en argument pour l'amount (if amount < 0) throw new RuntimeException
public
Account
(
String
owner
,
int
amount
)
{
this
.
amount
=
amount
;
this
.
owner
=
owner
;
}
public
static
Account
of
(
String
owner
,
int
amount
)
{
if
(
amount
<
0
)
{
throw
new
RuntimeException
(
"Amount must be positive"
);
}
return
new
Account
(
owner
,
amount
);
}
public
int
amount
()
{
return
this
.
amount
;
}
// Cette fonction peut causer un "overflow" de la valeur de l'amount, dans
// cas sa valeur deviendra négative
// Solution: avant d'incrémenter la valeur de this.amount par value, faire
// une vérification si la somme de ces 2 valeurs est plus petit ou égale
// à la valeur maximale d'un entier signé sur 32 bits, sinon jeter une Exception
public
void
deposite
(
int
value
)
{
this
.
amount
+=
value
;
}
public
void
withdraw
(
int
value
)
{
if
(
value
<=
0
)
{
throw
new
RuntimeException
(
"Amount must be positive"
);
}
else
if
(
this
.
amount
value
<
0
)
{
throw
new
RuntimeException
(
"operation impossible: capital would have become negative"
);
}
this
.
amount
=
value
;
}
}
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment