From a995fe76e75481515a27b5bc24f47c5a11a76d10 Mon Sep 17 00:00:00 2001 From: alanbarco Date: Fri, 13 Aug 2021 20:21:38 -0500 Subject: [PATCH] Sugerencias de Refactoring --- .classpath | 7 ++++ .gitignore | 3 +- .project | 17 ++++++++++ .../codesmells/smelly/pieces/Bishop.java | 15 +++++++-- .../codesmells/smelly/pieces/King.java | 11 +++++-- .../codesmells/smelly/pieces/Knight.java | 15 +++++++-- .../codesmells/smelly/pieces/LeftBishop.java | 11 ------- .../codesmells/smelly/pieces/LeftKnight.java | 11 ------- .../codesmells/smelly/pieces/LeftRook.java | 11 ------- .../codesmells/smelly/pieces/Pawn.java | 10 +++--- .../codesmells/smelly/pieces/Piece.java | 32 ++++--------------- .../codesmells/smelly/pieces/Queen.java | 11 +++++-- .../codesmells/smelly/pieces/RightBishop.java | 11 ------- .../codesmells/smelly/pieces/RightKnight.java | 11 ------- .../codesmells/smelly/pieces/RightRook.java | 11 ------- .../codesmells/smelly/pieces/Rook.java | 14 ++++++-- 16 files changed, 90 insertions(+), 111 deletions(-) create mode 100644 .classpath create mode 100644 .project delete mode 100644 src/com/directi/training/codesmells/smelly/pieces/LeftBishop.java delete mode 100644 src/com/directi/training/codesmells/smelly/pieces/LeftKnight.java delete mode 100644 src/com/directi/training/codesmells/smelly/pieces/LeftRook.java delete mode 100644 src/com/directi/training/codesmells/smelly/pieces/RightBishop.java delete mode 100644 src/com/directi/training/codesmells/smelly/pieces/RightKnight.java delete mode 100644 src/com/directi/training/codesmells/smelly/pieces/RightRook.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..ea04328 --- /dev/null +++ b/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.gitignore b/.gitignore index b33f9ee..47dcc6c 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,5 @@ hs_err_pid* .idea_modules/ target/ -out/ \ No newline at end of file +out/ +/bin/ diff --git a/.project b/.project new file mode 100644 index 0000000..f439d0a --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + Refactoring + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/src/com/directi/training/codesmells/smelly/pieces/Bishop.java b/src/com/directi/training/codesmells/smelly/pieces/Bishop.java index 481b16f..5d47fdd 100644 --- a/src/com/directi/training/codesmells/smelly/pieces/Bishop.java +++ b/src/com/directi/training/codesmells/smelly/pieces/Bishop.java @@ -1,13 +1,22 @@ package com.directi.training.codesmells.smelly.pieces; -import com.directi.training.codesmells.smelly.Color; +import com.directi.training.codesmells.refactored.Color; +import com.directi.training.codesmells.refactored.chess.MoveUtil; +import com.directi.training.codesmells.refactored.Position; -public abstract class Bishop extends Piece +//Fixed Collapsing Hierarchy (another instance of lazy-class) +public class Bishop extends Piece { public Bishop(Color color) { - super(color, 'b'); + super(color); + } + + @Override + public boolean isValidMove(Position from, Position to) + { + return MoveUtil.isDiagonalMove(from, to); } @Override diff --git a/src/com/directi/training/codesmells/smelly/pieces/King.java b/src/com/directi/training/codesmells/smelly/pieces/King.java index 5392eb8..623c66d 100644 --- a/src/com/directi/training/codesmells/smelly/pieces/King.java +++ b/src/com/directi/training/codesmells/smelly/pieces/King.java @@ -1,12 +1,19 @@ package com.directi.training.codesmells.smelly.pieces; -import com.directi.training.codesmells.smelly.Color; +import com.directi.training.codesmells.refactored.Color; +import com.directi.training.codesmells.refactored.Position; public class King extends Piece { public King(Color color) { - super(color, 'K'); + super(color); + } + + @Override + public boolean isValidMove(Position from, Position to) + { + return (Math.abs(from.getRow() - to.getRow()) == 1) && (Math.abs(from.getColumn() - to.getColumn()) == 1); } @Override diff --git a/src/com/directi/training/codesmells/smelly/pieces/Knight.java b/src/com/directi/training/codesmells/smelly/pieces/Knight.java index 1c58599..309ed73 100644 --- a/src/com/directi/training/codesmells/smelly/pieces/Knight.java +++ b/src/com/directi/training/codesmells/smelly/pieces/Knight.java @@ -1,12 +1,21 @@ package com.directi.training.codesmells.smelly.pieces; -import com.directi.training.codesmells.smelly.Color; +import com.directi.training.codesmells.refactored.Color; +import com.directi.training.codesmells.refactored.Position; -public abstract class Knight extends Piece +//Fixed Collapsing Hierarchy (another instance of lazy-class) +public class Knight extends Piece { public Knight(Color color) { - super(color, 'k'); + super(color); + } + + public boolean isValidMove(Position from, Position to) + { + int columnDiff = Math.abs(to.getColumn() - from.getColumn()); + int rowDiff = Math.abs(to.getRow() - from.getRow()); + return (columnDiff == 2 && rowDiff == 1) || (columnDiff == 1 && rowDiff == 2); } @Override diff --git a/src/com/directi/training/codesmells/smelly/pieces/LeftBishop.java b/src/com/directi/training/codesmells/smelly/pieces/LeftBishop.java deleted file mode 100644 index 144fd3b..0000000 --- a/src/com/directi/training/codesmells/smelly/pieces/LeftBishop.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.directi.training.codesmells.smelly.pieces; - -import com.directi.training.codesmells.smelly.Color; - -public class LeftBishop extends Bishop -{ - public LeftBishop(Color color) - { - super(color); - } -} diff --git a/src/com/directi/training/codesmells/smelly/pieces/LeftKnight.java b/src/com/directi/training/codesmells/smelly/pieces/LeftKnight.java deleted file mode 100644 index 81c6e4a..0000000 --- a/src/com/directi/training/codesmells/smelly/pieces/LeftKnight.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.directi.training.codesmells.smelly.pieces; - -import com.directi.training.codesmells.smelly.Color; - -public class LeftKnight extends Knight -{ - public LeftKnight(Color color) - { - super(color); - } -} diff --git a/src/com/directi/training/codesmells/smelly/pieces/LeftRook.java b/src/com/directi/training/codesmells/smelly/pieces/LeftRook.java deleted file mode 100644 index d28ac72..0000000 --- a/src/com/directi/training/codesmells/smelly/pieces/LeftRook.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.directi.training.codesmells.smelly.pieces; - -import com.directi.training.codesmells.smelly.Color; - -public class LeftRook extends Rook -{ - public LeftRook(Color color) - { - super(color); - } -} diff --git a/src/com/directi/training/codesmells/smelly/pieces/Pawn.java b/src/com/directi/training/codesmells/smelly/pieces/Pawn.java index bdcdb0e..51c15f8 100644 --- a/src/com/directi/training/codesmells/smelly/pieces/Pawn.java +++ b/src/com/directi/training/codesmells/smelly/pieces/Pawn.java @@ -1,13 +1,13 @@ package com.directi.training.codesmells.smelly.pieces; -import com.directi.training.codesmells.smelly.Color; -import com.directi.training.codesmells.smelly.Position; +import com.directi.training.codesmells.refactored.Color; +import com.directi.training.codesmells.refactored.Position; public class Pawn extends Piece { public Pawn(Color color) { - super(color, 'p'); + super(color); } @Override @@ -56,10 +56,10 @@ private boolean isTakingAllowedNumberOfSidewaysSteps(Position from, int columnsDiff = to.getColumn() - from.getColumn(); if (columnsDiff == -1) return (opponentPieceAtForwardLeft && getColor() == Color.WHITE) - || (opponentPieceAtForwardRight && getColor() == Color.BLACK); + || (opponentPieceAtForwardRight && getColor() == Color.BLACK); if (columnsDiff == 1) { return (opponentPieceAtForwardRight && getColor() == Color.WHITE) - || (opponentPieceAtForwardLeft && getColor() == Color.BLACK); + || (opponentPieceAtForwardLeft && getColor() == Color.BLACK); } return columnsDiff == 0; } diff --git a/src/com/directi/training/codesmells/smelly/pieces/Piece.java b/src/com/directi/training/codesmells/smelly/pieces/Piece.java index 8a78e31..cc1b994 100644 --- a/src/com/directi/training/codesmells/smelly/pieces/Piece.java +++ b/src/com/directi/training/codesmells/smelly/pieces/Piece.java @@ -1,17 +1,15 @@ package com.directi.training.codesmells.smelly.pieces; -import com.directi.training.codesmells.smelly.Color; -import com.directi.training.codesmells.smelly.Position; +import com.directi.training.codesmells.refactored.Color; +import com.directi.training.codesmells.refactored.Position; public abstract class Piece { - public Color _color; - public char _type; + private Color _color; //Fixed Indecent Exposure Code Smell by making field private - public Piece(Color color, char type) + public Piece(Color color) { _color = color; - _type = type; } public Color getColor() @@ -19,24 +17,6 @@ public Color getColor() return _color; } - public boolean isValidMove(Position from, Position to) - { - switch (_type) { - case 'b': - return Math.abs(from.getRow() - to.getRow()) == Math.abs(from.getColumn() - to.getColumn()); - case 'r': - return from.getRow() == to.getRow() || from.getColumn() == to.getColumn(); - case 'k': - int columnDiff = Math.abs(to.getColumn() - from.getColumn()); - int rowDiff = Math.abs(to.getRow() - from.getRow()); - return (columnDiff == 2 && rowDiff == 1) || (columnDiff == 1 && rowDiff == 2); - case 'q': - return Math.abs(from.getRow() - to.getRow()) == Math.abs(from.getColumn() - to.getColumn()) - || from.getRow() == to.getRow() || from.getColumn() == to.getColumn(); - case 'K': - return (Math.abs(from.getRow() - to.getRow()) == 1) && (Math.abs(from.getColumn() - to.getColumn()) == 1); - default: - return false; - } - } + //Fixed Switch-case code smell through polymorphism. Note that type field has also been removed. + public abstract boolean isValidMove(Position from, Position to); } diff --git a/src/com/directi/training/codesmells/smelly/pieces/Queen.java b/src/com/directi/training/codesmells/smelly/pieces/Queen.java index fafc410..4f0a5a9 100644 --- a/src/com/directi/training/codesmells/smelly/pieces/Queen.java +++ b/src/com/directi/training/codesmells/smelly/pieces/Queen.java @@ -1,12 +1,19 @@ package com.directi.training.codesmells.smelly.pieces; -import com.directi.training.codesmells.smelly.Color; +import com.directi.training.codesmells.refactored.Color; +import com.directi.training.codesmells.refactored.chess.MoveUtil; +import com.directi.training.codesmells.refactored.Position; public class Queen extends Piece { public Queen(Color color) { - super(color, 'q'); + super(color); + } + + public boolean isValidMove(Position from, Position to) + { + return MoveUtil.isStraightLineMove(from, to); } @Override diff --git a/src/com/directi/training/codesmells/smelly/pieces/RightBishop.java b/src/com/directi/training/codesmells/smelly/pieces/RightBishop.java deleted file mode 100644 index 5e1b3c8..0000000 --- a/src/com/directi/training/codesmells/smelly/pieces/RightBishop.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.directi.training.codesmells.smelly.pieces; - -import com.directi.training.codesmells.smelly.Color; - -public class RightBishop extends Bishop -{ - public RightBishop(Color color) - { - super(color); - } -} diff --git a/src/com/directi/training/codesmells/smelly/pieces/RightKnight.java b/src/com/directi/training/codesmells/smelly/pieces/RightKnight.java deleted file mode 100644 index 27e67d8..0000000 --- a/src/com/directi/training/codesmells/smelly/pieces/RightKnight.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.directi.training.codesmells.smelly.pieces; - -import com.directi.training.codesmells.smelly.Color; - -public class RightKnight extends Knight -{ - public RightKnight(Color color) - { - super(color); - } -} diff --git a/src/com/directi/training/codesmells/smelly/pieces/RightRook.java b/src/com/directi/training/codesmells/smelly/pieces/RightRook.java deleted file mode 100644 index 07dae0b..0000000 --- a/src/com/directi/training/codesmells/smelly/pieces/RightRook.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.directi.training.codesmells.smelly.pieces; - -import com.directi.training.codesmells.smelly.Color; - -public class RightRook extends Rook -{ - public RightRook(Color color) - { - super(color); - } -} diff --git a/src/com/directi/training/codesmells/smelly/pieces/Rook.java b/src/com/directi/training/codesmells/smelly/pieces/Rook.java index 1058cf3..79180d0 100644 --- a/src/com/directi/training/codesmells/smelly/pieces/Rook.java +++ b/src/com/directi/training/codesmells/smelly/pieces/Rook.java @@ -1,12 +1,20 @@ package com.directi.training.codesmells.smelly.pieces; -import com.directi.training.codesmells.smelly.Color; +import com.directi.training.codesmells.refactored.Color; +import com.directi.training.codesmells.refactored.chess.MoveUtil; +import com.directi.training.codesmells.refactored.Position; -public abstract class Rook extends Piece +//Fixed Collapsing Hierarchy (another instance of lazy-class) +public class Rook extends Piece { public Rook(Color color) { - super(color, 'r'); + super(color); + } + + public boolean isValidMove(Position from, Position to) + { + return MoveUtil.isHorizontalOrVerticalMove(from, to); } @Override