Escolar Documentos
Profissional Documentos
Cultura Documentos
CEETEPS
Faculdade de Tecnologia de São Paulo
Departamento de Tecnologia da Informação
São Paulo
2013
i
RICARDO BAPTISTA
CEETEPS
Faculdade de Tecnologia de São Paulo
Departamento de Tecnologia da Informação
São Paulo
2013
ii
Baptista, Ricardo
B222c Construção automática de modelos de classes a partir
de especificações em linguagem natural / Ricardo Baptista.
-- São Paulo : Fatec-SP, 2013.
68 f. : il.
DEDICATÓRIA
Ricardo Baptista
iv
AGRADECIMENTOS
...a Deus, pois, sem sua ajuda, nada teria sido possível;
...ao Prof. Dr. Silvio Lago que aceitou orientar-me após meu outro orientador,
devido a problemas pessoais, ser forçado a não me orientar mais;
SUMÁRIO
LISTA DE FIGURAS ............................................................................................ vii
RESUMO .............................................................................................................. ix
ABSTRACT............................................................................................................ x
INTRODUÇÃO....................................................................................................... 1
5.1. ARQUITETURA.................................................................................... 24
CONCLUSÃO ...................................................................................................... 32
REFÊRENCIAS ................................................................................................... 33
Classe mdiPrincipal.......................................................................................... 34
Classe FraseClasseDTO.................................................................................. 57
Classe MetodoDTO.......................................................................................... 58
Classe TipoPalavraDTO................................................................................... 59
LISTA DE FIGURAS
Figura 1 – Representação diagramática de OMT para associações entre classes
(topo) e ligações entre objetos (abaixo) Fonte: Ricarte (2001).
Figura 2 – Representação diagramática de OMT para associações entre classes
com atributos Fonte: Ricarte (2001).
Figura 3 – Visualização de estrutura em UML Fonte: Lima (2011).
Figura 4 – Diagrama de Classes.
Figura 5 – Classe Galinha.
Figura 6 – Classe Carlos.
Figura 7 – Classe Gerente.
Figura 8 – Classe Carlos instanciando classe Gerente.
Figura 9 – Cadastro de Clientes.
Figura 10 – Classe X português.
Figura 11 – Polimorfismo.
Figura 12 – Encapsulamento.
Figura 13 – Diagrama de classes de um texto completo.
Figura 14 – Exemplo de Herança.
Figura 15 – Formalização do método.
Figura 16 – Árvore gramatical em bottom-up (Harmain, 2000).
Figura 17 – CM-Builder.
Figura 18 – TextToClass.
Figura 19 – Algoritmo usado no sistema TextToClass.
Figura 20 – Primeiro teste.
Figura 21 – Mensagem de erro alertando o usuário de que uma palavra não foi
localizada no banco de dados.
Figura 22 – Processo da frase "O cadastro de clientes cadastrará nome, telefone
e endereço." completo.
Figura 23 – Cadastro de palavras.
Figura 24 – Terceiro teste.
Figura 25 – MLD do banco de dados do sistema TextToClass.
viii
LISTA DE SIGLAS
Sigla/Abreviatura Significado
UML Linguagem de Modelagem Unificada.
POO Programação Orientada a Objetos.
OOP Object Oriented Programming.
Dll Dynamic Link Library.
OMT Object Modeling Technique.
RUP Processo Unificado Rational.
XML Linguagem de Marcação Extensiva.
XMI XML Metadata Interchange.
DTO Data Transfer Object.
WCF Windows Communication Foundation.
WinForms Interface Windows.
SGBD Sistema de Gerenciamento de Banco de Dados.
SQL Server Query Language.
C# Linguagem de programação da Microsoft.
IA Inteligência Artificial.
SOA Arquitetura Orientada a Serviços.
CRUD Uma sequência de comando que gerencia ações
de inclusão, alteração, leitura e exclusão de
dados em banco de dados relacional.
MLD Modelo Lógico de Dados.
IDE Plataforma de desenvolvimento de software.
ix
RESUMO
Esse trabalho tem como principal objetivo mostrar como um modelo de classes
pode ser construído, automaticamente, a partir da análise de requisitos especificados
em linguagem natural (português), fornecidos pelo usuário de um sistema a ser
desenvolvido. Para tanto, um protótipo de ferramenta para construção automática de
modelos de classes foi desenvolvido e resultados experimentais obtidos com essa
ferramenta foram relatados.
ABSTRACT
The main goal of this work is to show how a class model can be automatically
built from the analysis of requirements specified in natural language (Portuguese),
supplied by the user of a system to be developed. To this end, a prototype tool for
automatic construction of class models was developed and experimental results
obtained with this tool were reported.
INTRODUÇÃO
Ao se levantar especificações de requisitos com usuários, os mesmos
geralmente imaginam o sistema de uma forma diferente da forma que ele está
passando para o analista. Mas no decorrer do processo, os sistemas tomam a forma
que se espera ou muito aproximada. Isso requer muito tempo e esforço, o que
geralmente impacta muito no projeto.
MOTIVAÇÃO
OBJETIVO
HIPÓTESE
Esse trabalho assume, como hipótese, que é possível desenvolver uma ferra-
menta que, a partir da análise de documento textual de requisitos ou parte dele, pode
extrair automaticamente as classes referentes ao documento. Para isso, a ferramenta
deve ter acesso a um banco de dados representando um léxico em que as palavras
são categorizadas como substantivo, adjetivo, verbo e preposição.
METODOLOGIA
ORGANIZAÇÃO
1. MODELO DE CLASSES
Segundo Lima (2011), objetos são coisas do mundo real como pessoas,
animais, etc., que se descobre estudando suas características. Objeto, segundo o
dicionário, é tudo aquilo que é compreendido, considerado exterior, física ou psico-
logicamente pelo observador. Sendo assim, do ponto de vista da programação, objeto
é uma abstração de algo do mundo real.
1.1.1. Abstração
1.1.2. Encapsulamento
Uma associação pode ser feita com uma instância de objeto, e a permissão de
modificação é representada pelo modo de acesso.
Polimorfismo pode ser implementado por meio de uma classe abstrata, cujos
métodos são declarados, mas não são definidos, que é especializada em classes
filhas que herdam seus métodos. Polimorfismo significa que a mesma operação pode
se comportar de forma diferente em classes diferentes. Por exemplo, a opera-
ção “move”, quando aplicada a uma janela de um sistema de interfaces, tem um
comportamento distinto daquele observado quando é aplicada a uma peça de um jogo
de xadrez.
Polimorfismo também implica que uma operação de uma mesma classe pode
ser implementada por mais de um método. O usuário não precisa saber quantas
implementações existem para uma operação, ou explicitar qual método deve ser
usado: a linguagem de programação deve ser capaz de selecionar o método correto,
a partir do nome da operação, classe do objeto e argumentos para a operação. Desta
forma, novas classes podem ser adicionadas sem a necessidade de modificar código
já existente; pois cada classe apenas define os seus métodos e atributos e isso
também evita o acoplamento, já que não há necessidade de se modificar as outras
classes que possuem o método com o mesmo nome.
3.1. FUNDAMENTOS
Na frase “A galinha come milho”, “A galinha” é o sujeito e “come milho” é o
predicado. Como se sabe que a galinha é o sujeito? Porque o verbo relata uma ação
da galinha e o verbo se refere diretamente a ela. Portanto, pode-se inferir que
“galinha” refere-se a um objeto da classe “Galinha”, pois apenas objetos são capazes
de demonstrar comportamentos como, por exemplo, “comer”. Consequentemente,
pode-se também inferir que a palavra “comer” designa um método da classe
“Galinha”, pois refere-se a um comportamento esperado para os objetos dessa
classe. Em geral, substantivos representam classes, enquanto verbos representam
métodos. Com relação à frase “A galinha come milho”, ainda precisa-se saber se o
método “come” requer algum parâmetro ou devolve algo para quem o chama, mas
como saber isso? Nesse caso, a análise do contexto da frase deve levar à resposta;
pois é nesse contexto que se referencia o que a ação precisa para ocorrer. Como se
pode inferir pelo contexto, o método “comer” requer “milho” como parâmetro de
entrada. Por outro lado, como a frase não relata nenhum produto da ação “comer”, o
método “comer” não retorna nada (void). Assim, um modelo de classe correspondente
à frase “A galinha come milho” pode ser representado em UML conforme ilustrado na
Figura 5.
Ainda pode-se criar mais uma classe, porque segundo a frase, o gerente
também tem uma ação que é solicitar (fig. 7).
(instância) da classe “Funcionário”. Então se pode dizer que Carlos deve chamar o
gerente e entregar o relatório (fig. 8).
3.3. DEFINIÇÕES
Neste item será definida, dentro do conceito, a orientação a objetos (POO).
3.3.1. Polimorfismo
O polimorfismo é caracterizado quando duas ou mais classes distintas têm
métodos de mesmo nome, sendo que uma função pode utilizar um objeto de qualquer
uma das classes abstratas, sem a necessidade de tratar de forma diferente conforme
a classe do objeto, como já foi discutido no capítulo sobre POO.
16
Uma frase com polimorfismo: “Todo animal fala, a galinha cacareja e o gato
mia”.
Figura 11 - Polimorfismo
3.3.2. Encapsulamento
Encapsulamento vem de encapsular, que em programação orientada a objetos
significa separar o programa em partes, o mais isolado possível. A ideia é tornar o
software menos dependente, fácil de modificar (com pouco ou nenhum acoplamento)
e de criar novas implementações.
Figura 12 - Encapsulamento
“Tinha momentos em que deliciava-se com a ideia de que os livros podiam falar, ganhar vida e
autonomia.
Então compreendia o seu amor por aquelas estantes, graças às quais agora vivia e daqueles
livros dos quais obtivera ao longo dos anos uma felicidade diferente de todas as outras modalidades
possíveis de felicidade.
Ler era uma das coisas mais importantes da sua vida, da qual cada vez restavam menos
coisas importantes, e começou a contabilizá-las: a amizade, o café, o cigarro, o vinho, de vez em
quando fazer amor ora ao por ora ao nascer do sol (Amorinn, 2012)”.
Nesse texto são relatadas as ações de um sujeito oculto, mas pode-se definir o
sujeito por certos trechos do texto. O trecho “... Então compreendia o seu amor por
aquelas estantes, graças às quais agora vivia...” poder-se-ia dizer que o sujeito é um
bibliotecário, mas no trecho “Ler era uma das coisas mais importantes da sua vida”
pode-se definir com maior precisão que o sujeito é um “Leitor” acima de tudo como o
próprio texto o definiu. Pode-se agora listar as ações referentes ao sujeito
encontradas no texto: deliciava-se, tinha, compreendia, vivia, obtivera, ler, contabilizar
e fazer amor, pode-se também listar as propriedades encontradas: ideia, momentos,
amor pelas estantes, graças as estantes, longo dos anos, felicidade diferente das
outras, quantidade de coisas importantes, amizade, café, cigarro, vinho, ora por do sol
e ora nascer do sol.
Pode-se também identificar outra classe “Livros”, pois o autor relata duas
possíveis ações de livros, falar e ganhar com os seguintes atributos: vida e
autonomia.
Mas se o texto não define um sujeito então não se pode definir a classe? Na
verdade, todos os textos definem sujeitos mesmo que estejam ocultos. Ao longo do
texto, sempre se encontram menções ao sujeito; por exemplo: “Está chovendo.” o que
esta chovendo “Chuva” pode-se dizer então: “O Tempo está chovendo” o que chove
“O Tempo” então por definição “Tempo” é o sujeito da classe. Outro exemplo é, “Está
ensolarado” o que está ensolarado “O Tempo” então “O Tempo está ensolarado”.
4.1. CM-BUILDER
CM-Builder (Harmain, 2000) é um software desenvolvido para extração de
classes de textos em inglês. Essa ferramenta foi desenvolvida por Harmain para
demonstrar sua teoria. A Figura 17 mostra uma tela do sistema.
Figura 17 - CM-Builder
4.2. NL-OOPS
O NL-OOPS (Mich, 1996) é uma ferramenta CASE que suporta a análise de
requisitos, gerando modelos orientados a objetos a partir de documentos de requisitos
em inglês. A análise de linguagem natural no NL-OOPS é feita com base no núcleo
do sistema de processamento de linguagem natural LOLITA (Long & Garigliano,
1994), que usa uma rede semântica, denominada SemNet, para representação do
conhecimento. O módulo de análise orientada a objetos implementa um algoritmo
para a extração dos objetos e suas associações para uso na criação de modelos de
objetos.
4.3. UML-GENERATOR
O UML-Generator (Bajwa, 2003) permite que o sistema se adapte ao voca-
bulário do usuário e ao modo como analista modela sistemas de software. As técnicas
desenvolvidas podem ser usadas para várias aplicações, tais como sumarização de
documento, análise de software e modelagem, geração de consultas a banco de
dados, dentre outras. O UML-Generator analisa requisitos descritos por textos curtos
em inglês, fornecidos pelo usuário, extrai a informação associada e desenha vários
tipos de diagramas UML correspondentes aos textos analisados, tais como diagramas
de seqüência, diagramas de classe e diagramas de casos de usos. Ele ainda tem
capacidade para criar código automaticamente sem ambiente externo (sem IDE como
o Visual Studio). Em suma, o UML-Generator é uma ferramenta rápida e confiável
para gerar diagramas UML e respectivos códigos.
Figura 18 - TextToClass
24
5.1. ARQUITETURA
O protótipo do software foi desenvolvido em C#, com a interface em Windows
Forms. Para o banco de dados, foi usado o SQL Server e, para a comunicação entre
a interface e o banco de dados, foi usado um Web Service em WCF.
5.2. ALGORITMO
O algoritmo usado nesse projeto é baseado em identificação dos tipos das
palavras. Ao se inserir a frase no campo, o sistema decompõe a frase em palavras e
as compara com seu banco de dados. Assim que a palavra é identificada, e seu tipo é
determinado (verbo, substantivo, adjetivo ou outros), ela é colocada no campo
correspondente apresentado na tela do aplicativo.
Foram realizados dois tipos de teste, o teste linha a linha e o teste funcional
com o protótipo.
26
O segundo teste foi realizado e notou-se que o sistema não possuía algumas
palavras ou pontuações. Foi então adicionada uma tela de cadastro para as palavras.
A Figura 21 mostra o resultado do segundo teste com o erro.
27
Figura 21 - Mensagem de erro alertando o usuário de que uma palavra não foi
localizada no banco de dados.
A fase de teste funcional foi concluída com o terceiro e último teste, como mostra
a Figura 24.
Uma variável do tipo array de string (String[] frase) é populada com as palavras
da frase (i.e., cada posição desse vetor é preenchida com uma palavra da frase).
Então, com um laço de repetição (for) seleciona-se cada índice do referido array. No
decorrer do processo, para cada índice considerado, uma série de validações (if) são
feitas. Caso o item avaliado (objPalavraDTO._id_tipopalavra) passe por alguma das
validações, o item do array é cadastrado, através de um Web Service
(WCFTextToClass, pág. 66 do apêndice) no banco de dados, de acordo com seu tipo
identificado pelas validações. A Figura 25 mostra o Diagrama de Modelagem de
Dados (MLD) do banco de dados usado pelo sistema.
31
CONCLUSÃO
Esse trabalho descreve o paradigma de orientação a objetos (POO), a língua-
gem de modelagem de sistemas UML (Unified Modeling Language) e um método de
extração de modelos de classes a partir de especificações de requisitos em portu-
guês. Também descreve uma ferramenta desenvolvida para extração automática de
modelos classes a partir de especificações de requisitos em português, denominada
TextToClass, e relata resultados de testes realizados com essa ferramenta.
REFÊRENCIAS
LIMA, Adilson S. UML 2.3 do requisito à solução 1ª Edição; São Paulo: Érica,
2011.
AMORINN, http://www.recantodasletras.com.br/microcontos/3766599
Acessado em: 24/09/2012.
34
Classe mdiPrincipal
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TextToClass
{
public partial class mdiPrincipal : Form
{
private int childFormNumber = 0;
public mdiPrincipal()
{
InitializeComponent();
}
Classe frmGerador
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TextToClass.WCFTextToClass;
36
namespace TextToClass
{
public partial class frmGerador : Form
{
String[] frase = { };
TextToClassClient wcf = new TextToClassClient();
PalavraDTO objPalavraDTO = new PalavraDTO();
TipoPalavraDTO objTipoPalavraDTO = new TipoPalavraDTO();
FraseClasseDTO objFraseClasseDTO = new FraseClasseDTO();
MetodoDTO objMetodoDTO = new MetodoDTO();
List<String> lMetodo = new List<String>();
ParametroDTO objParametroDTO = new ParametroDTO();
List<String> lParametro = new List<String>();
int nomeClasse = 0;
public frmGerador()
{
InitializeComponent();
carregaGrdClasse();
}
if (txtFrase.Text != "")
{
frase = txtFrase.Text.Replace("classe", "").Replace("Classe", "").Replace(",",
"").Split(Convert.ToChar(" "));
if (frase.Count() != 0)
{
for (int i = 0; i < frase.Count(); i++)
{
objPalavraDTO = new PalavraDTO();
objPalavraDTO._nm_palavra = frase[i];
objPalavraDTO = wcf.retornaPalavraNm(objPalavraDTO);
if (objPalavraDTO._id_palavra != 0)
{
objTipoPalavraDTO = new TipoPalavraDTO();
37
objTipoPalavraDTO._id_tipopalavra = objPalavraDTO._id_tipopalavra;
if (wcf.retornaTipoPalavraID(objTipoPalavraDTO)._nm_tipopalavra != "")
{
if (nomeClasse == 0 && objPalavraDTO._id_tipopalavra == 7)
{
nomeClasse = 1;
string primeira = objPalavraDTO._nm_palavra;
char letraMaiuscula = char.ToUpper(primeira[0]);
objPalavraDTO._nm_palavra = letraMaiuscula + primeira.Substring(1);
groupBox2.Text = "Classe " + objPalavraDTO._nm_palavra;
retornoFraseClasse = wcf.inserirFraseClasse(objFraseClasseDTO);
objFraseClasseDTO._id_fraseclasse = retornoFraseClasse;
}
else if (objPalavraDTO._id_tipopalavra == 4)
{
if (txtMetodo.Text != "")
{
txtMetodo.Text += "; " + objPalavraDTO._nm_palavra;
}
else
{
txtMetodo.Text = objPalavraDTO._nm_palavra;
}
if (wcf.inserirMetodo(objMetodoDTO) != 0)
{
retornoMetodo = 1;
}
}
else if (objPalavraDTO._id_tipopalavra == 7)
{
if (txtParametro.Text != "")
{
txtParametro.Text += "; " + objPalavraDTO._nm_palavra;
}
else
{
txtParametro.Text = objPalavraDTO._nm_palavra;
}
if (wcf.inserirParametro(objParametroDTO) != 0)
{
retornoParametro = 1;
}
}
}
if(frase[i].Contains("."))
{
38
nomeClasse = 0;
#endregion
carregaGrdClasse();
}
if (objFraseClasseDTO._id_fraseclasse != 0)
{
objPalavraDTO._id_palavra = objFraseClasseDTO._id_palavra;
gboClasses.Text = "Classe: " + wcf.retornaPalavraID(objPalavraDTO)._nm_palavra;
lstMetodos.DataSource = lMetodo;
lstParametros.DataSource = lParametro;
}
}
}
}
39
Classe frmPalavras
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TextToClass.WCFTextToClass;
namespace TextToClass
{
public partial class frmPalavras : Form
{
TextToClassClient wcf = new TextToClassClient();
PalavraDTO palavra = new PalavraDTO();
TipoPalavraDTO tipoPalavra = new TipoPalavraDTO();
public frmPalavras()
{
InitializeComponent();
//carregaGrdPalavras();
carregaCboTipoPalavra();
}
if (wcf.retornaPalavraNm(palavra)._id_palavra == 0)
{
if (wcf.InserirPalavra(palavra) == 1)
40
{
MessageBox.Show("Registro inserido com sucesso !");
carregaGrdPalavras();
}
else
{
MessageBox.Show("Falha ao inserido com sucesso !");
}
}
else
{
MessageBox.Show("Registro já inserido !");
}
}
else
{
MessageBox.Show("Preencha todos os campos para inserir um registro");
}
}
if (palavra._id_palavra != 0)
{
if (wcf.ExcluirPalavra(palavra) == 1)
{
MessageBox.Show("Registro excluido com sucesso !");
carregaGrdPalavras();
}
else
{
MessageBox.Show("Falha ao excluir o registro !");
}
}
else
{
MessageBox.Show("Registro não encontrado !");
}
}
}
}
Classe FraseClasseDAL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WCFTextToClass.DTO;
using WCFTextToClass.Util;
using System.Data;
41
namespace WCFTextToClass.DAL
{
public class FraseClasseDAL
{
Banco_DAL objBancoDAL = new Banco_DAL();
List<FraseClasseDTO> lFraseClasse = new List<FraseClasseDTO>();
FraseClasseDTO objFraseClasse = new FraseClasseDTO();
DataTable objDT = new DataTable();
Int32 retorno = 0;
return retorno;
}
catch (Exception)
{
retorno = 0;
return retorno;
}
finally
{
retorno = new Int32();
}
}
return retorno;
}
catch (Exception)
{
retorno = 2;
return retorno;
42
}
finally
{
retorno = new Int32();
}
}
return retorno;
}
catch (Exception)
{
retorno = 2;
return retorno;
}
finally
{
retorno = new Int32();
}
}
if (objDT.Rows.Count > 0)
{
for (int i = 0; i < objDT.Rows.Count; i++)
{
objFraseClasse = new FraseClasseDTO();
objFraseClasse._id_fraseclasse = Convert.ToInt32(objDT.Rows[i]["id_fraseclasse"]);
objFraseClasse._id_palavra = Convert.ToInt32(objDT.Rows[i]["id_palavra"]);
objFraseClasse._nm_frase = objDT.Rows[i]["nm_frase"].ToString();
objFraseClasse._retorno = 1;
objFraseClasse._msg_retorno = "Registro encontrado !";
lFraseClasse.Add(objFraseClasse);
}
}
else
{
objFraseClasse._retorno = 0;
objFraseClasse._msg_retorno = "Registro não encontrado !";
lFraseClasse.Add(objFraseClasse);
}
return lFraseClasse;
}
43
catch (Exception e)
{
objFraseClasse._retorno = 2;
objFraseClasse._msg_retorno = "Falha ao localizar os registros, mensagem: " + e.Message + " !";
lFraseClasse.Add(objFraseClasse);
return lFraseClasse;
}
finally
{
objFraseClasse = new FraseClasseDTO();
lFraseClasse = new List<FraseClasseDTO>();
}
}
if (objDT.Rows.Count > 0)
{
objFraseClasse = new FraseClasseDTO();
objFraseClasse._id_fraseclasse = Convert.ToInt32(objDT.Rows[0]["id_fraseclasse"]);
objFraseClasse._id_palavra = Convert.ToInt32(objDT.Rows[0]["id_palavra"]);
objFraseClasse._nm_frase = objDT.Rows[0]["nm_frase"].ToString();
objFraseClasse._retorno = 1;
objFraseClasse._msg_retorno = "Registro encontrado !";
}
else
{
objFraseClasse._retorno = 0;
objFraseClasse._msg_retorno = "Registro não encontrado !";
}
return objFraseClasse;
}
catch (Exception e)
{
objFraseClasse._retorno = 2;
objFraseClasse._msg_retorno = "Falha ao localizar os registros, mensagem: " + e.Message + " !";
return objFraseClasse;
}
finally
{
objFraseClasse = new FraseClasseDTO();
lFraseClasse = new List<FraseClasseDTO>();
}
}
if (objDT.Rows.Count > 0)
{
44
objFraseClasse._retorno = 1;
objFraseClasse._msg_retorno = "Registro encontrado !";
}
else
{
objFraseClasse._retorno = 0;
objFraseClasse._msg_retorno = "Registro não encontrado !";
}
return objFraseClasse;
}
catch (Exception e)
{
objFraseClasse._retorno = 2;
objFraseClasse._msg_retorno = "Falha ao localizar os registros, mensagem: " + e.Message + " !";
return objFraseClasse;
}
finally
{
objFraseClasse = new FraseClasseDTO();
lFraseClasse = new List<FraseClasseDTO>();
}
}
}
}
Classe MetodosDAL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WCFTextToClass.DTO;
using WCFTextToClass.Util;
using System.Data;
namespace WCFTextToClass.DAL
{
public class MetodosDAL
{
Banco_DAL objBanco = new Banco_DAL();
MetodoDTO objMetodo = new MetodoDTO();
List<MetodoDTO> lMetodo = new List<MetodoDTO>();
DataTable objDT = new DataTable();
Int32 retorno = 0;
}
else
{
retorno = 0;
}
return retorno;
}
catch (Exception)
{
retorno = 0;
return retorno;
}
finally
{
retorno = new Int32();
}
}
return retorno;
}
catch (Exception)
{
retorno = 2;
return retorno;
}
finally
{
retorno = new Int32();
}
}
return retorno;
}
catch (Exception)
{
46
retorno = 2;
return retorno;
}
finally
{
retorno = new Int32();
}
}
if (objDT.Rows.Count > 0)
{
objMetodo = new MetodoDTO();
objMetodo._id_metodo = Convert.ToInt32(objDT.Rows[0]["id_metodo"]);
objMetodo._id_palavra = Convert.ToInt32(objDT.Rows[0]["id_palavra"]);
objMetodo._fl_status = Convert.ToBoolean(objDT.Rows[0]["fl_status"]);
objMetodo._retorno = 1;
objMetodo._msg_retorno = "Registro encontrado !";
lMetodo.Add(objMetodo);
}
else
{
objMetodo._retorno = 0;
objMetodo._msg_retorno = "Registro não encontrado !";
lMetodo.Add(objMetodo);
}
}
catch (Exception e)
{
objMetodo._retorno = 2;
objMetodo._msg_retorno = "Falha ao consultar registros, mensagem: " + e.Message + " !";
lMetodo.Add(objMetodo);
}
return lMetodo;
}
if (objDT.Rows.Count > 0)
{
objMetodo = new MetodoDTO();
objMetodo._id_metodo = Convert.ToInt32(objDT.Rows[0]["id_metodo"]);
objMetodo._id_palavra = Convert.ToInt32(objDT.Rows[0]["id_palavra"]);
objMetodo._fl_status = Convert.ToBoolean(objDT.Rows[0]["fl_status"]);
objMetodo._retorno = 1;
objMetodo._msg_retorno = "Registro encontrado !";
}
else
{
objMetodo._retorno = 0;
objMetodo._msg_retorno = "Registro não encontrado !";
47
}
}
catch (Exception e)
{
objMetodo._retorno = 2;
objMetodo._msg_retorno = "Falha ao consultar registros, mensagem: " + e.Message + " !";
}
return objMetodo;
}
try
{
objDT = objBanco.ExecuteDT("Select * from tbMetodo where fl_status = 1 and id_fraseclasse = " +
id_fraseclasse);
return lPalavras;
}
}
}
Classe PalavraDAL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WCFTextToClass.Util;
using System.Data;
using WCFTextToClass.DTO;
namespace WCFTextToClass.DAL
{
public class PalavraDAL
{
Banco_DAL objBancoDAL = new Banco_DAL();
DataSet objDS = new DataSet();
DataTable objDT = new DataTable();
PalavraDTO objPalavraDTO = new PalavraDTO();
List<PalavraDTO> lPalavra = new List<PalavraDTO>();
Int32 retorno = new Int32();
try
{
if (objBancoDAL.ExecuteDR("Insert into tbDicionario(nm_palavra, id_tipopalavra, fl_status) values
('"
+ bePalavra._nm_palavra + "'," + bePalavra._id_tipopalavra +
",1)").RecordsAffected != 0)
{
retorno = 1;
}
else
{
retorno = 0;
}
}
catch (Exception e)
{
retorno = 2;
bePalavra._msg_retorno = "Falha ao inserir o registro " + e.Message;
}
return retorno;
}
try
{
if (objBancoDAL.ExecuteDR("Update tbDicionario set nm_palavra = " + bePalavra._nm_palavra
+ ", id_tipopalavra = " + bePalavra._id_tipopalavra + " where
id_palavra = " + bePalavra._id_palavra + "").RecordsAffected > 0)
{
retorno = 1;
}
else
{
retorno = 0;
}
}
catch (Exception e)
{
retorno = 2;
bePalavra._msg_retorno = "Falha ao alterar o registro " + e.Message;
}
return retorno;
}
try
{
if (objBancoDAL.ExecuteDR("Update tbDicionario set fl_status = 0 where id_palavra = " +
bePalavra._id_palavra + "").RecordsAffected > 0)
{
retorno = 1;
}
else
{
retorno = 0;
}
49
}
catch (Exception e)
{
retorno = 2;
bePalavra._msg_retorno = "Falha ao excluir o registro " + e.Message;
}
return retorno;
}
try
{
objDT = objBancoDAL.ExecuteDT("Select * from tbDicionario where fl_status = 1");
if (objDT.Rows.Count != 0)
{
for (int i = 0; i < objDT.Rows.Count; i++)
{
objPalavraDTO = new PalavraDTO();
objPalavraDTO._id_palavra = Convert.ToInt32(objDT.Rows[i]["id_palavra"].ToString());
objPalavraDTO._id_tipopalavra = Convert.ToInt32(objDT.Rows[i]["id_tipopalavra"].ToString());
objPalavraDTO._nm_palavra = objDT.Rows[i]["nm_palavra"].ToString();
lPalavra.Add(objPalavraDTO);
}
objPalavraDTO._retorno = 1;
}
else
{
objPalavraDTO._retorno = 0;
}
}
catch (Exception e)
{
objPalavraDTO._retorno = 2;
objPalavraDTO._nm_palavra = "Falha ao consultar o registro " + e.Message;
lPalavra.Add(objPalavraDTO);
}
return lPalavra;
}
try
{
objDT = objBancoDAL.ExecuteDT("Select * from tbDicionario where id_palavra = " +
bePalavra._id_palavra);
if (objDT.Rows.Count != 0)
{
for (int i = 0; i < objDT.Rows.Count; i++)
{
objPalavraDTO = new PalavraDTO();
50
objPalavraDTO._id_palavra = Convert.ToInt32(objDT.Rows[i]["id_palavra"].ToString());
objPalavraDTO._id_tipopalavra = Convert.ToInt32(objDT.Rows[i]["id_palavra"].ToString());
objPalavraDTO._nm_palavra = objDT.Rows[i]["nm_palavra"].ToString();
}
objPalavraDTO._retorno = 1;
}
else
{
objPalavraDTO._retorno = 0;
}
}
catch (Exception e)
{
objPalavraDTO._retorno = 2;
objPalavraDTO._nm_palavra = "Falha ao consultar o registro " + e.Message;
}
return objPalavraDTO;
}
try
{
objDT = objBancoDAL.ExecuteDT("Select * from tbDicionario where nm_palavra = '" +
bePalavra._nm_palavra + "'");
if (objDT.Rows.Count != 0)
{
for (int i = 0; i < objDT.Rows.Count; i++)
{
objPalavraDTO = new PalavraDTO();
objPalavraDTO._id_palavra = Convert.ToInt32(objDT.Rows[i]["id_palavra"].ToString());
objPalavraDTO._id_tipopalavra = Convert.ToInt32(objDT.Rows[i]["id_tipopalavra"].ToString());
objPalavraDTO._nm_palavra = objDT.Rows[i]["nm_palavra"].ToString();
objPalavraDTO._fl_status = Convert.ToBoolean(objDT.Rows[i]["fl_status"]);
}
objPalavraDTO._retorno = 1;
}
else
{
objPalavraDTO._retorno = 0;
}
}
catch (Exception e)
{
objPalavraDTO._retorno = 2;
objPalavraDTO._nm_palavra = "Falha ao consultar o registro " + e.Message;
}
return objPalavraDTO;
}
}
}
51
Classe ParametrosDAL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WCFTextToClass.DTO;
using WCFTextToClass.Util;
using System.Data;
namespace WCFTextToClass.DAL
{
public class ParametrosDAL
{
Banco_DAL objBancoDAL = new Banco_DAL();
ParametroDTO objParametroDTO = new ParametroDTO();
List<ParametroDTO> lParametro = new List<ParametroDTO>();
DataTable objDT = new DataTable();
Int32 retorno = 0;
try
{
if (objBancoDAL.ExecuteDR("insert into tbParametro (id_palavra, id_fraseclasse, fl_status) " +
"values (" + beParametroDTO._id_palavra + ", " + beParametroDTO._id_fraseclasse
+ ", 1)").RecordsAffected == 1)
{
objBancoDAL = new Banco_DAL();
return retorno = Convert.ToInt32(objBancoDAL.ExecuteDT("Select MAX(id_parametro) from
tbParametro").Rows[0].ItemArray[0]);
}
else
{
return retorno = 0;
}
}
catch (Exception)
{
return retorno = 0;
}
finally
{
retorno = 0;
}
}
{
return retorno = 2;
}
finally
{
retorno = 0;
}
}
if (objDT.Rows.Count > 0)
{
objParametroDTO = new ParametroDTO();
objParametroDTO._id_parametro = Convert.ToInt32(objDT.Rows[0]["id_parametro"]);
objParametroDTO._id_palavra = Convert.ToInt32(objDT.Rows[0]["id_palavra"]);
objParametroDTO._retorno = 1;
objParametroDTO._msg_retorno = "Registro encontrado !";
lParametro.Add(objParametroDTO);
}
else
{
objParametroDTO = new ParametroDTO();
objParametroDTO._retorno = 0;
objParametroDTO._msg_retorno = "Registro não encontrado !";
lParametro.Add(objParametroDTO);
}
return lParametro;
}
catch (Exception e)
{
objParametroDTO = new ParametroDTO();
objParametroDTO._retorno = 2;
53
lParametro.Add(objParametroDTO);
return lParametro;
}
finally
{
objDT = new DataTable();
objParametroDTO = new ParametroDTO();
lParametro = new List<ParametroDTO>();
}
}
if (objDT.Rows.Count > 0)
{
objParametroDTO = new ParametroDTO();
objParametroDTO._id_parametro = Convert.ToInt32(objDT.Rows[0]["id_parametro"]);
objParametroDTO._id_palavra = Convert.ToInt32(objDT.Rows[0]["id_palavra"]);
objParametroDTO._retorno = 1;
objParametroDTO._msg_retorno = "Registro encontrado !";
}
else
{
objParametroDTO = new ParametroDTO();
objParametroDTO._retorno = 0;
objParametroDTO._msg_retorno = "Registro não encontrado !";
}
return objParametroDTO;
}
catch (Exception e)
{
objParametroDTO = new ParametroDTO();
objParametroDTO._retorno = 2;
objParametroDTO._msg_retorno = "Falha ao localizar os registros, mensagem: " + e.Message +
"!";
return objParametroDTO;
}
finally
{
objDT = new DataTable();
objParametroDTO = new ParametroDTO();
}
}
return lPalavras;
}
catch (Exception e)
{
objParametroDTO = new ParametroDTO();
objParametroDTO._retorno = 2;
objParametroDTO._msg_retorno = "Falha ao localizar os registros, mensagem: " + e.Message +
"!";
return lPalavras;
}
finally
{
objDT = new DataTable();
objParametroDTO = new ParametroDTO();
}
}
}
}
Classe TipoPalavraDAL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WCFTextToClass.DTO;
using WCFTextToClass.Util;
using System.Data;
namespace WCFTextToClass.DAL
{
public class TipoPalavraDAL
{
Banco_DAL objBancoDAL = new Banco_DAL();
TipoPalavraDTO objTipoPalavraDTO = new TipoPalavraDTO();
DataSet objDS = new DataSet();
DataTable objDT = new DataTable();
List<TipoPalavraDTO> lTipoPalavra = new List<TipoPalavraDTO>();
Int32 retorno = new Int32();
try
{
if (objBancoDAL.ExecuteDR("insert into tbTipoPalavra(_nm_tipopalavra) values ("
+beTipoPalavraDTO._nm_tipopalavra+")").RecordsAffected > 0)
{
retorno = 1;
}
else
{
retorno = 0;
}
}
catch (Exception e)
55
{
retorno = 2;
objTipoPalavraDTO._msg_retorno = "Falha ao inserir registro " + e.Message;
}
return retorno;
}
try
{
if (objBancoDAL.ExecuteDR("Update tbTipoPalavra set nm_tipopalavra = " +
beTipoPalavra._nm_tipopalavra
+ " where id_tipopalavra = " +
beTipoPalavra._id_tipopalavra).RecordsAffected > 0)
{
retorno = 1;
}
else
{
retorno = 0;
}
}
catch (Exception e)
{
retorno = 2;
objTipoPalavraDTO._msg_retorno = "Falha ao alterar o registro " + e.Message;
throw;
}
return retorno;
}
try
{
if (objBancoDAL.ExecuteDR("Update tbTipoPalavra set fl_status = false "
+ " where id_tipopalavra = " +
beTipoPalavra._id_tipopalavra).RecordsAffected > 0)
{
retorno = 1;
}
else
{
retorno = 0;
}
}
catch (Exception e)
{
retorno = 2;
objTipoPalavraDTO._msg_retorno = "Falha ao excluir o registro " + e.Message;
throw;
}
return retorno;
}
56
try
{
objDT = objBancoDAL.ExecuteDT("Select * from tbTipoPalavra");
if (objDT.Rows.Count > 0)
{
for (int i = 0; i < objDT.Rows.Count; i++)
{
objTipoPalavraDTO = new TipoPalavraDTO();
objTipoPalavraDTO._id_tipopalavra = Convert.ToInt32(objDT.Rows[i]["id_tipopalavra"]);
objTipoPalavraDTO._nm_tipopalavra = objDT.Rows[i]["nm_tipopalavra"].ToString();
objTipoPalavraDTO._fl_status = Convert.ToBoolean(objDT.Rows[i]["fl_status"]);
lTipoPalavra.Add(objTipoPalavraDTO);
}
}
}
catch (Exception e)
{
objTipoPalavraDTO = new TipoPalavraDTO();
objTipoPalavraDTO._retorno = 2;
objTipoPalavraDTO._msg_retorno = "Falha ao consultar registro " + e.Message;
lTipoPalavra.Add(objTipoPalavraDTO);
}
return lTipoPalavra;
}
try
{
objDT = objBancoDAL.ExecuteDT("Select * from tbTipoPalavra where id_tipopalavra = " +
beTipoPalavra._id_tipopalavra);
if (objDT.Rows.Count > 0)
{
for (int i = 0; i < objDT.Rows.Count; i++)
{
objTipoPalavraDTO = new TipoPalavraDTO();
objTipoPalavraDTO._id_tipopalavra = Convert.ToInt32(objDT.Rows[i]["id_tipopalavra"]);
objTipoPalavraDTO._nm_tipopalavra = objDT.Rows[i]["nm_tipopalavra"].ToString();
objTipoPalavraDTO._fl_status = Convert.ToBoolean(objDT.Rows[i]["fl_status"]);
lTipoPalavra.Add(objTipoPalavraDTO);
}
}
}
catch (Exception e)
{
objTipoPalavraDTO = new TipoPalavraDTO();
objTipoPalavraDTO._retorno = 2;
objTipoPalavraDTO._msg_retorno = "Falha ao consultar registro " + e.Message;
lTipoPalavra.Add(objTipoPalavraDTO);
}
57
return objTipoPalavraDTO;
}
try
{
objDT = objBancoDAL.ExecuteDT("Select * from tbTipoPalavra where nm_tipopalavra = " +
beTipoPalavra._nm_tipopalavra);
if (objDT.Rows.Count > 0)
{
for (int i = 0; i < objDT.Rows.Count; i++)
{
objTipoPalavraDTO = new TipoPalavraDTO();
objTipoPalavraDTO._id_tipopalavra = Convert.ToInt32(objDT.Rows[i]["id_tipopalavra"]);
objTipoPalavraDTO._nm_tipopalavra = objDT.Rows[i]["nm_tipopalavra"].ToString();
objTipoPalavraDTO._fl_status = Convert.ToBoolean(objDT.Rows[i]["fl_status"]);
lTipoPalavra.Add(objTipoPalavraDTO);
}
}
}
catch (Exception e)
{
objTipoPalavraDTO = new TipoPalavraDTO();
objTipoPalavraDTO._retorno = 2;
objTipoPalavraDTO._msg_retorno = "Falha ao consultar registro " + e.Message;
lTipoPalavra.Add(objTipoPalavraDTO);
}
return objTipoPalavraDTO;
}
}
}
Classe FraseClasseDTO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WCFTextToClass.DTO
{
public class FraseClasseDTO
{
public Int32 _id_fraseclasse { get; set; }
public String _nm_frase { get; set; }
public Int32 _id_palavra { get; set; }
public Int32 _id_metodo { get; set; }
public Int32 _id_parametro { get; set; }
Classe MetodoDTO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WCFTextToClass.DTO
{
public class MetodoDTO
{
public Int32 _id_metodo { get; set; }
public Int32 _id_palavra { get; set; }
public Int32 _id_fraseclasse { get; set; }
public Boolean _fl_status { get; set; }
Classe PalavraDTO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WCFTextToClass.DTO
{
public class PalavraDTO
{
#region Propriedades
#endregion
}
}
Classe ParametroDTO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WCFTextToClass.DTO
{
public class ParametroDTO
{
public Int32 _id_parametro { get; set; }
public Int32 _id_palavra { get; set; }
public Int32 _id_fraseclasse { get; set; }
59
Classe TipoPalavraDTO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WCFTextToClass.DTO
{
public class TipoPalavraDTO
{
#region Propriedades
#endregion
}
}
Classe Banco_DAL
using System;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Configuration;
namespace WCFTextToClass.Util
{
public class Banco_DAL
{
SqlConnection mSqlConexao;
//String mSqlServerHost = String.Empty;
SqlCommand cmd = new SqlCommand();
public Banco_DAL()
{
mSqlConexao = new SqlConnection();
}
60
try
{
this.OpenConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = mSqlConexao;
da.SelectCommand = cmd;
da.Fill(ds);
da.Dispose();
}
catch (Exception e)
{
61
MessageBox.Show(e.Message);
}
this.CloseConnection();
return ds;
}
try
{
this.OpenConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = mSqlConexao;
da.SelectCommand = cmd;
da.Fill(myDataTable);
da.Dispose();
this.CloseConnection();
return myDataTable;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
return myDataTable;
}
try
{
this.OpenConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = mSqlConexao;
dr = cmd.ExecuteReader();
cmd.Dispose();
return dr;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
this.CloseConnection();
return dr;
try
{
this.OpenConnection();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sql;
62
cmd.Connection = mSqlConexao;
dr = cmd.ExecuteReader();
return dr;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
this.CloseConnection();
return dr;
}
try
{
this.OpenConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = comandoSQL;
cmd.Connection = mSqlConexao;
retorno = cmd.ExecuteScalar().ToString();
this.CloseConnection();
}
catch (Exception e)
{
throw (e);
}
return retorno;
}
try
{
this.OpenConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = mSqlConexao;
dr = cmd.ExecuteReader();
cmd.Dispose();
}
catch (Exception e)
{
throw (e);
}
this.CloseConnection();
return dr;
}
}
}
Classe ITextToClass
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
63
using System.Text;
using WCFTextToClass.DAL;
using WCFTextToClass.DTO;
using System.Data;
namespace WCFTextToClass
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name
"IService1" in both code and config file together.
[ServiceContract]
public interface ITextToClass
{
#region Palavra
[OperationContract]
Int32 InserirPalavra(PalavraDTO bePalavra);
[OperationContract]
Int32 AlteraPalavra(PalavraDTO bePalavra);
[OperationContract]
Int32 ExcluirPalavra(PalavraDTO bePalavra);
[OperationContract]
List<PalavraDTO> retornaPalavraTodos();
[OperationContract]
PalavraDTO retornaPalavraID(PalavraDTO bePalavra);
[OperationContract]
PalavraDTO retornaPalavraNm(PalavraDTO bePalavra);
#endregion
#region TipoPalavra
[OperationContract]
Int32 InserirTipoPalavra(TipoPalavraDTO beTipoPalavraDTO);
[OperationContract]
Int32 AlterarTipoPalavra(TipoPalavraDTO beTipoPalavraDTO);
[OperationContract]
Int32 ExcluirTipoPalavra(TipoPalavraDTO beTipoPalavraDTO);
[OperationContract]
List<TipoPalavraDTO> retornaTipoPalavraTodos();
[OperationContract]
TipoPalavraDTO retornaTipoPalavraID(TipoPalavraDTO beTipoPalavraDTO);
[OperationContract]
TipoPalavraDTO retornaTipoPalavraNm(TipoPalavraDTO beTipoPalavraDTO);
#endregion
#region FraseClasse
[OperationContract]
Int32 inserirFraseClasse(FraseClasseDTO beFraseClasseDTO);
[OperationContract]
Int32 alterarFraseClasse(FraseClasseDTO beFraseClasseDTO);
64
[OperationContract]
Int32 excluirFraseClasse(FraseClasseDTO beFraseClasseDTO);
[OperationContract]
List<FraseClasseDTO> retornaTodosFraseClasse();
[OperationContract]
FraseClasseDTO retornaFraseClasseID(FraseClasseDTO beFraseClasseDTO);
[OperationContract]
FraseClasseDTO retornaIDFraseClasse(FraseClasseDTO beFraseClasseDTO);
#endregion
#region Metodo
[OperationContract]
Int32 inserirMetodo(MetodoDTO beMetodoDTO);
[OperationContract]
Int32 alterarMetodo(MetodoDTO beMetodoDTO);
[OperationContract]
Int32 excluirMetodo(MetodoDTO beMetodoDTO);
[OperationContract]
List<MetodoDTO> retornaTodosMetodo();
[OperationContract]
MetodoDTO retornaMetodoID(MetodoDTO beMetodoDTO);
[OperationContract]
List<Int32> retornaIdPalavraMetodoIDFrase(Int32 id_fraseclasse);
#endregion
#region Parametro
[OperationContract]
Int32 inserirParametro(ParametroDTO beParametroDTO);
[OperationContract]
Int32 alterarParametro(ParametroDTO beParametroDTO);
[OperationContract]
Int32 excluirParametro(ParametroDTO beParametroDTO);
[OperationContract]
List<ParametroDTO> retornaTodosParametro();
[OperationContract]
ParametroDTO retornaParametroID(ParametroDTO beParametroDTO);
[OperationContract]
List<Int32> retornaIdPalavraParametroID(Int32 id_fraseclasse);
#endregion
}
}
Classe WCFTextToClass
using System;
65
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using WCFTextToClass.DAL;
using System.Data;
using WCFTextToClass.DTO;
namespace WCFTextToClass
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name
"Service1" in code, svc and config file together.
public class WCFTextToClass : ITextToClass
{
PalavraDAL objPalavraDAL = new PalavraDAL();
TipoPalavraDAL objTipoPalavraDAL = new TipoPalavraDAL();
FraseClasseDAL objFraseClasseDAL = new FraseClasseDAL();
MetodosDAL objMetodosDAL = new MetodosDAL();
ParametrosDAL objParametroDAL = new ParametrosDAL();
GenericoDAL objGenericoDAL = new GenericoDAL();
#region Palavras
#endregion
#region TipoPalavra
#endregion
#region FraseClasse
#endregion
#region Metodo
{
return objMetodosDAL.inserirMetodo(beMetodoDTO);
}
#endregion
#region Parametro
#endregion
68
}
}