Array
(
)

Classe abstrata

Pjava
   - 27 ago 2012

Sei que é básico da OO, mas às vezes nos confundimos. Antes eu tinha isso:
Domain.Entity.Tarefa _Tarefa = new Domain.Entity.Tarefa();
Acontece que a classe Tarefa virou abstrata. Como eu faço agora?

Pjava
   - 27 ago 2012

Em realidade eu tenho isso aqui. Não posso instaciar uma classe abstrata, então o que eufaço no lugar de...?

public static Domain.Entity.Tarefa RetornarPorID(Domain.Finder.Tarefa _PesquisarTarefa)
{
SqlConnection _SqlConnection = new SqlConnection();
SqlDataReader _SqlDataReader = null;

try
{
_SqlConnection = DataMapperHelper.AbreConexao();

List<SqlParameter> _ListSqlParameters = new List<SqlParameter>();
_ListSqlParameters.Add(new SqlParameter("IdTarefa", _PesquisarTarefa.IdTarefa));

_SqlDataReader = DAO.DAOBase.RetornarPorID(_SqlConnection, "JP_SEL_TarefaPorFiltro", _ListSqlParameters);

Domain.Entity.Tarefa _Tarefa = new Domain.Entity.Tarefa();

while (_SqlDataReader.Read())
{
Inicializar(_Tarefa, _SqlDataReader);
}

return _Tarefa;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (_SqlDataReader != null)
{
_SqlDataReader.Close();
_SqlDataReader.Dispose();
}

DataMapperHelper.FecharConexao(_SqlConnection);
}
}

Pjava
   - 27 ago 2012

Em realidade eu tenho isso aqui. Não posso instaciar uma classe abstrata, então o que eufaço no lugar de...?

public static Domain.Entity.Tarefa RetornarPorID(Domain.Finder.Tarefa _PesquisarTarefa)
{
SqlConnection _SqlConnection = new SqlConnection();
SqlDataReader _SqlDataReader = null;

try
{
_SqlConnection = DataMapperHelper.AbreConexao();

List<SqlParameter> _ListSqlParameters = new List<SqlParameter>();
_ListSqlParameters.Add(new SqlParameter("IdTarefa", _PesquisarTarefa.IdTarefa));

_SqlDataReader = DAO.DAOBase.RetornarPorID(_SqlConnection, "JP_SEL_TarefaPorFiltro", _ListSqlParameters);

Domain.Entity.Tarefa _Tarefa = new Domain.Entity.Tarefa();

while (_SqlDataReader.Read())
{
Inicializar(_Tarefa, _SqlDataReader);
}

return _Tarefa;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (_SqlDataReader != null)
{
_SqlDataReader.Close();
_SqlDataReader.Dispose();
}

DataMapperHelper.FecharConexao(_SqlConnection);
}
}

Marcio [admin]
   - 27 ago 2012

Veja se esse vídeo te ajuda com o conceito:
http://www.devmedia.com.br/classe-abstrata-curso-basico-de-java-e-orientacao-a-objetos-parte-29/25322

Pjava
   - 27 ago 2012

É que vídeo eu não consigo abrir aqui na empresa, é proibido, mas farei quando eu chegar em casa.

Pjava
   - 27 ago 2012

Em realidade esse conceito de Abstract factory, ainda não entrou em minha cabeça. Cara, to penando e atrasando a equipe, por falta de entendimento desse assunto. Isso que vc explicou eu entendi, é que até para passar a dúvida não sei como. Preciso implementar uma classe Abstract Factory, tipo, TarefaFactory, lá passar um método tipo Criar(SqlDataReader _SqlDataReader), mais ou menos isso:

_SqlDataReader = DAO.DAOBase.RetornarPorID(_SqlConnection, "JP_SEL_TarefaPorFiltro", _ListSqlParameters);

Domain.Entity.Tarefa _Tarefa = TarefaFactory.Criar(_SqlDataReader);

.......

fazer isso, ou seja, dependendo da tarefa, executar a classe conveniente:

TarefaFactory <- verifca a tarefa e chama outra factory responsável
EnviaEmailFactory <- gera o EnviarEmail
ExecutarDTSXFactory <- gera o ExecutarDTSX

EnviaEmailFactory >> EnviaEmail(Classe que sobreexcreve o método executa para enviar email)

ExecutarDTSXFactory >> xecutarDTSX(Classe que sobreexcreve o método executa para executar DTSX)

E assim sucessivamente.

Isso é que eu não estou conseguindo entender e consequentemente implementar.