Você está na página 1de 12

A PROGRAMAO ORIENTADA A OBJETOS COMO FERRAMENTA PARA O APRENDIZADO E AUXLIO EM PROJETOS DE ENGENHARIA

Lincoln C. Zamboni lincoln.zamboni@mackenzie.com.br Edson A. R. Barros prof_edson@mackenzie.com.br Sergio V. D. Pamboukian sergiop@mackenzie.com.br Universidade Presbiteriana Mackenzie Escola de Engenharia Depto. Propedutica de Eng. Rua da Consolao, 930 CEP 01302-907 Consolao So Paulo SP

Resumo: O estudante de engenharia possui, nos dias de hoje, muitos recursos e ferramentas computacionais para auxili-lo na confeco de seus projetos. Linguagens de programao esto disponveis para o desenvolvimento de aplicaes cientficas de forma rpida, com interfaces grficas atraentes e de fcil manipulao, em ambientes propcios orientao a objetos com seu pragmatismo voltado para o reso. Cincias bsicas, como o clculo e a fsica tambm trazem a sua contribuio para a formalizao e soluo de problemas especficos que ocorrem nos projetos. Neste trabalho abordamos um problema tpico de engenharia nas reas de hidrulica e hidrologia, que o dimensionamento de galerias ou canais a partir da vazo proveniente de uma bacia com at 100 hm e mostramos como frmulas simples permitem o desenvolvimento de classes de objetos para reso. Enfocamos os conceitos de orientao a objetos e o reso de classes bem como os fundamentos sobre linguagens de programao que devem ser de conhecimento de todos os propensos futuros engenheiros. Palavras-chaves: Computao, Programao, Hidrulica, Hidrologia, Clculo. 1. INTRODUO

Algumas dcadas atrs, as rguas de clculo, os nomogramas e as calculadoras mecnicas eram indispensveis em um curso de engenharia. Com o passar do tempo, as calculadoras eletrnicas substituram tais recursos e tambm se tornaram indispensveis. Atualmente, os computadores com seus softwares so as principais ferramentas de auxilio nas mais diversas fases do projeto de engenharia. A UML (Unified Modeling Language) permitiu a padronizao, a modelagem, o desenvolvimento e a documentao dos projetos de software orientados a objetos e os ambientes com linguagens de programao tambm orientadas a objeto tornaram-se os maiores fomentadores do reso de componentes. Os conceitos abordados em disciplinas do ciclo bsico e, em especial, as com contedo de computao e programao, podem, e devem, ser utilizadas na resoluo de vrios problemas de engenharia, desde os mais simples aos mais complexos. Tratados sob a tica da orientao a objetos, os mais simples fornecem o aprendizado bsico e os mais complexos o aprofundamento e percepo da necessidade desta orientao.

Este trabalho objetiva: mostrar a evoluo das metodologias empregadas nas linguagens de programao e enumerar os conhecimentos necessrios para um estudante de engenharia; mostrar a existncia explcita de integrao de conhecimentos entre disciplinas que formam o ciclo bsico da engenharia; mostrar a resoluo de um problema tpico de engenharia fazendo uso de tcnicas de programao orientadas a objeto e o conseqente reso de tais objetos. Ao selecionarmos um dos inmeros problemas tpicos e atraentes de engenharia na rea de hidrulica e hidrologia, cabe salientar que poderamos ter selecionado um de qualquer outra rea que, com frmulas simples e tabelas, promoveriam o desenvolvimento de classes de objetos para reso com uma facilidade de abordagem mpar. 2. METODOLOGIAS DE PROGRAMAO

2.1. Da Programao Estruturada Programao Orientada a Objetos A elaborao de algoritmos desenvolve no estudante de engenharia qualidades de planejamento, preparo e previso que no devem ser omitidas no ensino superior. A to famosa frmula de Bhaskara, vista na equao (1), um exemplo trivial de algoritmo onde, a partir do conhecimento dos valores reais de a, b e c da equao do segundo grau ax2 + bx + c = 0, determina-se, os dois valores da raiz x.
x= b b2 4 a c 2a
processo geral e abstrato

(1)

crebro humano processo abstrato k

processo abstrato k.1

processo abstrato k.2

...

processo abstrato k.n

11000111010110101010111111000001011010100000001111111010100010101010001

computador

Figura 1 Domnio da complexidade Segundo BARROS ET AL. (2003), a complexidade de um programa pode ser dominada atravs da programao estruturada, uma metodologia que se compe de alguns princpios elementares (veja a Figura 1): princpio da abstrao a concepo ou viso do programa separado de sua realidade. a simplificao de fatos, descrevendo o que est sendo feito sem explicar como est sendo feito;

princpio da formalidade possibilita analisar os programas de forma matemtica. Fornece uma abordagem rigorosa e metdica. Possibilita a transmisso de idias e instrues sem ambigidades e permite que estas sejam automatizadas; princpio da diviso a subdiviso organizacional de um programa em um conjunto de partes menores e independentes, mais fceis de serem entendidas, resolvidas, manipuladas e testadas individualmente; princpio da hierarquia a organizao hierrquica que est relacionada com o princpio da diviso. A organizao das partes em uma estrutura hierrquica do tipo rvore sempre aumenta a compreensibilidade. A partir de um processo geral e abstrato do que o programa deve fazer, este dividido em vrios processos menores tambm abstratos. Qualquer uma destes processos pode, de forma hierrquica, ser dividido em mais processos abstratos e assim sucessivamente. A metodologia termina por chegar a um nvel tal de formalidade no qual o processo pode ser implementado no computador atravs de uma linguagem de programao. Na linguagem C++, por exemplo, um processo implementado como uma funo. As funes aceitam entradas e sadas de forma a generalizar o processo aplicando-se a quaisquer dados de tipos determinados. As entradas (e) so os argumentos e dados globais usados na funo. As sadas (s) so o valor de retorno (as funes podem ou no possuir valor de retorno), modificaes feitas atravs de ponteiros e referncias, bem como mudanas em dados globais (veja a Figura 2).

e/s
ponto de vista do usurio

e s
processo abstrato

s e s e

Figura 2 Funes como mdulos de construo A idia da Programao Orientada a Objetos surgiu nos anos 60, porm apenas os programadores experientes e de alto conhecimento tcnico se utilizavam dela, pois os conceitos de programao eram novos e a elaborao dos algoritmos era complicada. S aps o aparecimento dos ambientes grficos (como o Windows) e das linguagens Visuais (como Delphi, C++ Builder, Visual C++, Visual Basic, etc.) os programadores se sentiram mais vontade para utilizar este tipo de programao. Objetos so metforas naturais para objetos fsicos e entidades abstratas. Expressar a computao em termos de objetos reduz a lacuna entre o mundo real e o programa. Os objetos so formados por dados e processos, combinando-os de forma que os processos acessem ou modifiquem os dados. As classes so tipos de objetos declarados pelo usurio. Elas agregam uma declarao de dados e uma declarao de processos (mtodos) para processar os dados. As classes descrevem grupos de objetos com propriedades semelhantes, comportamento, relacionamentos e semntica comuns. Todos os objetos da mesma classe tm processos comuns mas dados distintos. Cada objeto criado a partir de uma classe, via uma especificao do valor para seus dados. Como podemos ver em BARROS ET AL. (2003), trs idias fundamentais caracterizam a programao orientada a objetos:

encapsulamento: acesso ou modificao dos dados de forma a ocultar os detalhes da implementao destes com o uso de uma interface de processos. Assim a mesma classe pode ter diferentes implementaes, em diferentes tempos, sem afetar o cdigo que a utiliza. Os dados so definidos pela interface, e os detalhes de sua implementao so abstrados; hereditariedade: organiza classes para reuso, com classes derivadas herdando processos de classes base (processos no necessitam recodificao para classes de componentes comuns). Estende os processos da programao procedimental para uma estrutura de dados e processos. Novas classes e seus processos podem ser definidos e extenses de classes existentes; polimorfismo: o processo a ser executado sobre o objeto depende do objeto real (eventualmente identificado por ponteiro) em tempo de execuo. Um processo para girar uma figura, por exemplo, vai chamar o cdigo correto para girar um tringulo, um retngulo, etc. 2.2. Conhecimentos fundamentais para o estudante de engenharia Nas disciplinas de computao e programao existentes nos cursos de engenharia, procura-se fornecer ao aluno alguns conceitos fundamentais sobre uma determinada linguagem de programao para que a mesma, em conjunto com mtodos matemticos aprendidos em outras disciplinas, possam auxili-lo na soluo de problemas especficos de sua rea. Estes conceitos trazidos para o mbito da linguagem C++, e que podem ser facilmente migrados para qualquer outra linguagem orientada a objetos como Java, C#, Object Pascal e outras, so: instrues de controle do fluxo: seqncia, condio (if/else, switch) e repetio (for, do/while e while); tipos bsicos de dados: int, double, char, bool, float, long int, long double, etc; reso de classes de objetos de interface grfica: formulrios, rtulos, botes, caixas de edio, de checagem, de listagem, combinadas, grades, botes de rdio, etc. arranjos e estruturas: ponteiros, operadores [], new e delete para alocao dinmica; classes: o construtor padro, construtor de cpia, destruidor, operador de atribuio, encapsulamento e mtodos de acesso; o polimorfismo, mtodos virtuais e virtuais puros; o hereditariedade; classes da Standard Template Library (STL): string, vector, list, etc. interessante que os conceitos de orientao a objetos sejam apresentados em duas fases: a primeira reusando classes de objetos presentes no ambiente integrado da linguagem e a segunda desenvolvendo classes para reso. Alm disso, devemos enfatizar o uso de unidades do SI (Sistema Internacional de Unidades) nas frmulas de engenharia, a documentao interna do cdigo com comentrios e a organizao do programa em unidades. 3. DIMENSIONAMENTO DE GALERIAS E CANAIS A PARTIR DA VAZO PROVENIENTE DE UMA BACIA Para ilustrar o uso da programao orientada a objetos como ferramenta auxiliar no desenvolvimento de projetos de engenharia, mostraremos a seguir um exemplo prtico que consiste no desenvolvimento de classes de objetos para reso no dimensionamento de galerias ou canais a partir da vazo proveniente de uma bacia com at 100 hm.

Utilizaremos as frmulas de Occhipinti, equao (2), Racional, equao (3), e Ganguillet-Kutter, equao (4), extradas de AZEVEDO NETO E ALVAREZ (1973) e tambm o Mtodo da Bisseo que est detalhado item 4. As unidades do SI seguiram os quadros constantes em ROZEMBERG (2002).

I=

27,96 T 0,112 (t + 15) 0,86T


0 , 0144

(2)

Q=

C A I 6
k+

(3)

1 n A R i Q= m h n 1+ k Rh

(4)

Nas equaes (2) e (3) temos: I = intensidade da precipitao crtica (mm/min) para a cidade de So Paulo; T = intervalo de recorrncia, ou perodo de retorno (anos); t = tempo de concentrao (h); Q = vazo da bacia (m/s); C = coeficiente de escoamento superficial, ou de run-off (adimensional); A = rea da bacia contribuinte a montante (hm). Na equao (4) temos: Q = vazo da galeria ou canal (m3/s); k = varivel auxiliar vista na equao (7); i = inclinao da galeria ou canal (adimensional); n = coeficiente de rugosidade da galeria ou canal (adimensional) definido pela classe de rugosidade vista na Tabela 1; Am = rea molhada da galeria ou canal (m2) conforme Tabela 2; Rh = raio hidrulico da galeria ou canal (m) calculado conforme a equao (8); p = permetro molhado da galeria ou canal (m) conforme Tabela 2.
k = 23 + 0,00155 i

(7)

Rh =

Am p Tabela 1 Classes e coeficientes de rugosidade


Classe de rugosidade (CR)
A B C D E

(8)

Material da seo
barro vitrificado cimento alisado concreto canais lamosos canais dragados

Coeficiente de rugosidade (n)


0,014 0,011 0,013 0,025 0,028

Tabela 2 reas e permetros molhados


Nome da seo Geometria
d

rea molhada Am

Permetro molhado p

quadrada
d

d2

3 d

circular

3/4

0,589048622548086 d 2

1,9866515 d

circular

1/2

d/2

0,392699081698724 d 2

1,57079632679490 d

4.

TEOREMA DE BOLZANO E MTODO DA BISSEO

Para determinar a vazo atravs da frmula de Ganguillet-Kutter (4) temos que utilizar um dos mtodos do Clculo Numrico para a determinao de razes de uma funo. O mtodo utilizado no exemplo deste artigo o da bisseo, descrito a seguir. Segundo o teorema de Bolzano, se y = f (x ) uma funo contnua no intervalo [a, b] (a < b ) e f (a ) f (b ) < 0 , ento existe uma raiz em ]a, b[ , isto , f ( ) = 0 . A Figura 3 ilustra de forma geomtrica o teorema de Bolzano. Em ZAMBONI e MONEZZI JUNIOR (2002), podemos ver a demonstrao deste teorema e tambm do mtodo da bisseo utilizado para a busca da raiz.
(+) (+) a b (-) f(a)f(b)<0 (+) a b (-) f(a)f(b)<0 f(a)f(b)>0 f(a)f(b)>0 a b a b a (-) f(a)f(b)<0 (+) (+) f(a)f(b)<0 (+) (-) (+) b a b (+)

Figura 3 Ilustraes do Teorema de Bolzano

Vamos montar duas seqncias reais a1 , a2 , a3 ,... e b1 , b2 , b3 ,... da seguinte forma: a1 = a e b1 = b para i = 1, 2, 3,... se f ( i ) f (bi ) 0 , ento ai +1 = i e bi +1 = bi a +b i = i i 2 se f ( i ) f (a ) < 0 , ento ai +1 = ai e bi +1 = i As seqncias reais formadas tm as seguintes propriedades: 1. A seqncia a i crescente, isto , ai ai +1 e bi decrescente, isto , bi +1 bi . 2. So limitadas, isto , ai < b e a < bi . ba 3. bi ai = i 1 . 2 Pelas propriedades acima conclumos que as seqncias possuem limites iguais, isto , lim ai = lim bi = .
i

Como y = f ( x ) contnua em [a, b] , temos lim f (ai ) = lim f (bi ) = f ( ) . Assim f ( ) f (b ) 0 e f ( ) f (a ) < 0 . Logo ( f ( )) f (a ) f (b) 0 .
2 2
i i

Como f (a ) f (b) < 0 (hiptese do teorema) e ( f (a )) 0 , s poderemos ter ( f (a )) = 0 , isto , f ( ) = 0 . Logo a raiz procurada. O mtodo da bisseo consiste em construirmos as duas seqncias reais a1 , a2 , a3 ,... e b1 , b2 , b3 ,... , porm no at o infinito. Pararemos suas construes quando atingirmos um valor a +b n = n n , tal que n < , onde um erro preestabelecido. Observe que, sendo 2 bn an a + b b an < n n < n an < < bn , teremos que simplificado nos leva a uma cota 2 2 2
2
n

para a diferena entre a raiz aproximada e a exata, n <

bn an bn a n , teremos . Se 2 2 n < , isto , n uma aproximao para a raiz com erro inferior a . ba , onde O nmero de iteraes n pode ser previsto facilmente considerado: 2 ba ln ba . 2n > 0 . Logo, e, ento n ln 2

Exemplo Usando o mtodo da bisseo, podemos determinar a raiz da funo de Ganguillet-Kutter vista na equao (9) com erro inferior a 0,01. Nela consideramos Q = 2,0 m 3 / s , i = 0,002 , n = 0,013 e seo quadrada de lado x.
1 n A R i f ( x) = Q m h n 1+ k Rh k+

(9)

O grfico da funo pode ser visto na Figura 4 que tambm mostra a localizao aproximada da raiz na funo de Ganguillet-Kutter (9).
2

y = f (x)
0

y
2

raiz
4 0.4 0.6 0.8 1 1.2 1.4

Figura 4 Raiz da funo Como f ( x ) contnua para x > 0 , f (0,5) = 1,738 e f (1,5) = -2,986 , ento, pelo teorema de Bolzano, existe uma raiz no intervalo ]0,5; 1,5[ . A Tabela 3 ilustra a obteno das seqncias reais a1 , a2 , a3 ,... e b1 , b2 , b3 ,... dadas na demonstrao do teorema de Bolzano, ou melhor, do mtodo da bisseo. Tabela 3 Bisseo da funo
i

(+ )
ai

i =

ai + bi 2

( )
bi

bi ai 2

1 2 3 4 5 6 7

0,500 1,000 1,000 1,000 1,063 1,063 1,063

1,000 1,250 1,125 1,063 1,094 1,079 1,071

1,500 0,500 1,500 0,250 1,250 0,125 1,125 0,063 1,125 0,032 1,094 0,016 1,079 0,008 < = 0,010

Logo, a raiz aproximada com erro inferior a 0,01 7 = 1,071 . Observemos que
b a ln 1,5 0,5 ln = 0,01 = 6,644 , logo n = 7 a melhor escolha. n ln 2 ln 2

5.

CLASSES DESENVOLVIDAS

A Figura 5 mostra as classes que compem o pequeno projeto de uso de frmulas de engenharia: a classe TBacia, as classes TGaleriaCanal e TTabelaCR com relacionamento de um para um e as outras trs classes derivadas da classe TGaleriaCanal. As Figuras 6, 7, 8 e 10 mostram as especificaes das classes escritas em C++. A Figura 9 mostra a implementao do Mtodo da Bisseo. A Figura 11 mostra uma pequena aplicao orientada a objetos construda instanciando-se as classes j citadas e tambm classes de objetos para a interface grfica tais como formulrios, caixas de agrupamento, caixas de edio, caixas de checagem, caixas de combinao, rtulos, botes, grupo de botes de rdio e grade de cadeias de caracteres.

TBacia TGaleriaCanalQuadrada

TGaleriaCanal 1

TGaleriaCanalCircular34

TGaleriaCanalCircular12 1 TTabelaCR

Figura 5 Classes do problema tpico


class TGaleriaCanal { protected: string nome; // Nome da seo da galeria ou canal. string material; // Material da seo da galeria ou canal. double Q; // Vazo da galeria ou canal (m/s). double i; // Inclinao da galeria ou canal (adimensional). double n; // Coeficiente de rugosidade da galeria ou canal(adim.). double d; // Dimenso da galeria ou canal (m). double k; // Constante para a frmula de Ganguiliet-Kutter. // Mtodo para validao da entrada. void Valida(); // Mtodo para clculo da imagen da funo de Ganguiliet-Kutter: double f(const double &x); // Mtodo virtual puro para clculo da rea molhada da galeria ou canal (m): virtual double Am(const double &x) = 0; // Mtodo virtual puro para clculo do permetro molhado da galeria ou canal // (m): virtual double p(const double &x) = 0; // Mtodo virtual para clculo do raio hidrulico da galeria ou canal (m): double Rh(const double &x); public: // Mtodos para mostrar e alterar os valores da galeria ou canal: string GetNome() {return nome;} void SetNome(const string &nome) {this->nome = nome;} string GetMaterial() {return material;} void SetMaterial(const string &material) {this->material = material;} double GetQ() {return Q;} void SetQ(const double &Q) {this->Q = Q; Valida();} double Geti() {return i;} void Seti(const double &i) {this->i = i; Valida();} double Getn() {return n;} void Setn(const double &n) {this->n = n; Valida();} // Construtor Padro e com todos os parmetros: TGaleriaCanal(const string &nome = "sem nome", const string &material = "concreto", const double &Q = 2.0, const double &i = 0.002, const double &n = 0.013); // Construtor com consulta a uma tabela de classe de rugosidade: TGaleriaCanal(const string &nome, const char &CR, const TTabelaCR &tcr, const double &Q, const double &i); // Aqui no geramos o construtor de cpia, o destruidor e o operador de // atribuio pois estes sero gerados implicitamente pelo compilador. // Mtodo para dimensionamento da galeria ou canal (m) baseado no mtodo da // bisseo: double Dimensiona(); };

Figura 6 Classe TGaleriaCanal

class TGaleriaCanalQuadrada: public TGaleriaCanal { protected: // Mtodo virtual para clculo da rea molhada da galeria ou canal (m): virtual double Am(const double &x); // Mtodo virtual para clculo do permetro molhado da galeria ou canal (m): virtual double p(const double &x); public: // Construtor Padro e com todos os parmetros: TGaleriaCanalQuadrada(const string &nome = "sem nome", const string &material = "concreto", const double &Q = 2.0, const double &i = 0.002, const double &n = 0.013); // Construtor com consulta a uma tabela de classe de rugosidade: TGaleriaCanalQuadrada(const string &nome, const char &CR, const TTabelaCR &tcr, const double &Q, const double &i); };

Figura 7 Classe TGaleriaCanalQuadrada derivada de TGaleriaCanal


class TTabelaCR { private: struct TLinha { string material; // Material da seo. double n; // Coeficiente de rugosidade. }; TLinha *lin; // Ponteiro para acessar a tabela na memria. int tam; // Tamanho da tabela (de 0 at 26 linhas). public: // Mtodo de obteno da Classe de Rugosidade (CR): char GetCR(const int &num) {return (char)(num + 64);} // Mtodos de obteno do material: string GetMaterial(const char &CR); string GetMaterial(const int &num){return GetMaterial(GetCR(num));} // Mtodos de obteno do coeficiente de rugosidade: double Getn(const char &CR); double Getn(const int &num){return Getn(GetCR(num));} // Mtodo de obteno do tamanho da tabela: int GetTamanho(); // Mtodo de adio de uma nova linha na tabela: bool Adiciona(const string &material, const double &n); // Mtodos de remoo de uma linha da tabela: bool Remove(const char &CR); bool Remove(const int &num){return Remove(GetCR(num));} // Mtodo de modificao de uma linha da tabela: bool SetLinha(const char &CR, const string &material, const double &n); // Construtor padro: TTabelaCR(const int &tam = 5); // Construtor de cpia: TTabelaCR(const TTabelaCR &t); // Destruidor: ~TTabelaCR(); // Operador de Atribuio: TTabelaCR & operator =(const TTabelaCR &t); };

Figura 8 Classe TTabelaCR


double TGaleriaCanal::Dimensiona() { double a = 0.0, b = 1.0, alfa; while(f(b) > 0) b++; // Encontro da inverso de sinal. while((b - a) / 2.0 >= 1E-15){ // Preciso para o mtodo da bisseo. alfa = (a + b) / 2.0; if(f(alfa) * f(b) <= 0.0) a = alfa; else b = alfa; } return d = (a + b) / 2.0; }

Figura 9 Mtodo da Bisseo

class TBacia { private: string nome; // Nome da bacia. double I; // Intensidade da precipitao crtica para So Paulo (mm/min). double T; // Intervalo de recorrncia, ou perodo de retorno (anos). double t; // Tempo de concentrao (h). double Q; // Vazo da bacia (m/s). double C; // Coeficiente de escoamento superficial (adimensional). double A; // rea da bacia contribuinte a montante (hm). // Mtodo para clculo de I e de Q. void Calc(); public: // Construtor Padro e com todos os parmetros: TBacia(const string &nome = "sem nome", const double &T = 5.0, const double &t = 0.30, const double &C = 0.80, const double &A = 2.0); // Aqui no geramos o construtor de cpia, o destruidor e o operador de // atribuio pois estes sero gerados implicitamente pelo compilador. // Mtodos para mostrar e alterar os valores da bacia: string GetNome() {return nome;} double GetI() {return I;} double GetT() {return T;} void SetT(const double &T) {this->T = T; Calc();} double Gett() {return t;} void Sett(const double &t) {this->t = t; Calc();} double GetQ() {return Q;} double GetC() {return C;} void SetC(const double &C) {this->C = C; Calc();} double GetA() {return A;} void SetA(const double &A) {this->A = A; Calc();} // Mtodo operador para combinao de duas bacias. TBacia operator +(const TBacia &B); };

Figura 10 Classe TBacia

Figura 11 Aplicao elaborada a partir das classes


6. CONSIDERAES FINAIS

Como pudemos ver, o dimensionamento de canais e galerias exemplifica de forma simples e eficaz os requisitos principais do desenvolvimento de software em termos de componentes reutilizveis e aplicaes sob a tica da engenharia. O mtodo da bisseo

utilizado no dimensionamento tambm pode ser programado de maneira fcil e rpida e ser um mtodo de clculo de uma classe para reso. As linguagens de programao orientadas a objetos, atravs do princpio da hereditariedade e polimorfismo, permitem que as classes sejam facilmente modificadas para, por exemplo, se adequar a outros tipos de seo de galerias ou canais. O encapsulamento mostrado de uma forma quase que desapercebida e natural.
Agradecimentos Gostaramos de agradecer a colaborao do Prof. Dr. Pedro Jos da Silva, que ministra aulas nas reas de Hidrulica e Hidrologia na Universidade Presbiteriana Mackenzie. REFERNCIAS BIBLIOGRFICAS

AZEVEDO NETO, J. M. de; ALVAREZ, G. A. Manual de Hidrulica. v.2 / 6. edio. So Paulo, Edgard Blcher; Braslia, INL, 1973. BARROS, E. A. R.; PAMBOUKIAN, S. V. D.; ZAMBONI, L. C. C++ Builder para Universitrios. So Paulo: Pginas & Letras, 2 ed., 2003. BARROS, Edson de Almeida Rego; PAMBOUKIAN, Sergio Vicente D.; ZAMBONI, Lincoln Csar. Ensino de Computao para estudantes de Engenharia. COBENGE2004 (Congresso Brasileiro de Ensino de Engenharia), Braslia DF, Unb 14 a 17 set 2004. BRAGA, B.; TUCCI, C.; TOZZI, M. Drenagem urbana: gerenciamento, simulao, controle. Porto Alegre: Editora da Universidade / UFRGS / ABRH, 1998. ROZEMBERG, I.M. O Sistema Internacional de Unidades SI. 2. Edio. So Paulo. Instituto Mau de Tecnologia, 2002. ZAMBONI, L. C.; MONEZZI JNIOR, O. Clculo Numrico para Universitrios. So Paulo: Pginas & Letras, 2 ed., 2002.

Abstract: The engineering student have, at the present time, several resources and computing tools to help himself in the conclusion of his own projects. Programming languages are available to the rapid scientific applications development, with attractive graphical interfaces and easy manipulation, in propitious environment to the object orientation with susceptible practice application to the reuse. Fundamentals sciences, like calculus and physics, brings its contribution to the formalization and solution of the specifics problems that happens in the projects. In this work we approach a typical problem in hydraulics and hydrology engineering areas, which is the computing of the dimension of a gallery or a canal having the flowing deriving from a basin with less than 100 hm and show how simply formulas allow the development of object classes for reuse. We show the object orientation concepts and the reuse of classes and also the fundaments about programming languages which must be the knowledge of the future engineering. Key-words: Computation, Programming, Hydraulics, Hydrology, Calculus