rmayormartins commited on
Commit
7f98838
·
1 Parent(s): 6803b94

JAVA-Judge15

Browse files
Files changed (1) hide show
  1. app.py +44 -1
app.py CHANGED
@@ -61,12 +61,53 @@ class JavaPOOEvaluator:
61
 
62
  return score, feedback
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  def evaluate_code(self, code: str) -> Dict:
65
  """Avalia o código Java"""
66
  cls_score, cls_feedback = self.analyze_classes_and_objects(code)
67
  meth_score, meth_feedback = self.analyze_methods(code)
 
 
68
 
69
- total_score = cls_score + meth_score
70
  proficiency = "Necessita Melhorias"
71
  if total_score >= 90:
72
  proficiency = "Excelente"
@@ -81,6 +122,8 @@ class JavaPOOEvaluator:
81
  "feedback": {
82
  "classes_objetos": cls_feedback,
83
  "metodos": meth_feedback,
 
 
84
  }
85
  }
86
 
 
61
 
62
  return score, feedback
63
 
64
+ def analyze_inheritance(self, code: str) -> Tuple[float, List[str]]:
65
+ """Avalia o uso de herança"""
66
+ score = 0
67
+ feedback = []
68
+
69
+ try:
70
+ tree = javalang.parse.parse(code)
71
+ subclasses = [node for _, node in tree.filter(javalang.tree.ClassDeclaration) if node.extends]
72
+
73
+ if subclasses:
74
+ score += 10
75
+ feedback.append(f"✓ {len(subclasses)} classe(s) estendendo outra(s).")
76
+ else:
77
+ feedback.append("⚠ Nenhum uso de herança encontrado.")
78
+ except Exception as e:
79
+ feedback.append(f"⚠ Erro ao analisar herança: {e}")
80
+
81
+ return score, feedback
82
+
83
+ def analyze_encapsulation(self, code: str) -> Tuple[float, List[str]]:
84
+ """Avalia o encapsulamento"""
85
+ score = 0
86
+ feedback = []
87
+
88
+ try:
89
+ tree = javalang.parse.parse(code)
90
+ fields = list(tree.filter(javalang.tree.FieldDeclaration))
91
+ private_count = sum(1 for _, node in fields if 'private' in node.modifiers)
92
+
93
+ if private_count:
94
+ score += 5
95
+ feedback.append(f"✓ {private_count} atributo(s) encapsulado(s) com 'private'.")
96
+ else:
97
+ feedback.append("⚠ Nenhum atributo privado encontrado.")
98
+ except Exception as e:
99
+ feedback.append(f"⚠ Erro ao analisar encapsulamento: {e}")
100
+
101
+ return score, feedback
102
+
103
  def evaluate_code(self, code: str) -> Dict:
104
  """Avalia o código Java"""
105
  cls_score, cls_feedback = self.analyze_classes_and_objects(code)
106
  meth_score, meth_feedback = self.analyze_methods(code)
107
+ enc_score, enc_feedback = self.analyze_encapsulation(code)
108
+ inh_score, inh_feedback = self.analyze_inheritance(code)
109
 
110
+ total_score = cls_score + meth_score + enc_score + inh_score
111
  proficiency = "Necessita Melhorias"
112
  if total_score >= 90:
113
  proficiency = "Excelente"
 
122
  "feedback": {
123
  "classes_objetos": cls_feedback,
124
  "metodos": meth_feedback,
125
+ "encapsulamento": enc_feedback,
126
+ "heranca": inh_feedback,
127
  }
128
  }
129