<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TechTips &#187; Orientação a Objetos</title>
	<atom:link href="http://www.techtips.com.br/category/programacao/orientacao-a-objetos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.techtips.com.br</link>
	<description>Dicas de Tecnologia</description>
	<lastBuildDate>Wed, 24 Jun 2009 19:06:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Ruby on Rails &#8211; Livro gratuito</title>
		<link>http://www.techtips.com.br/programacao/ruby-on-rails-livro-gratuito/</link>
		<comments>http://www.techtips.com.br/programacao/ruby-on-rails-livro-gratuito/#comments</comments>
		<pubDate>Fri, 05 Oct 2007 11:04:24 +0000</pubDate>
		<dc:creator>Zote</dc:creator>
				<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.techtips.com.br/programacao/ruby-on-rails-livro-gratuito/</guid>
		<description><![CDATA[Recebi hoje por email esse link e achei interessante compartilhar. É um link de download de um livro completo e gratuito de Ruby on Rails. Quem tiver interesse, deve ser rápido pois esse download estará disponível somente por mais alguns dias (contador no site acima). Abraço &#169; TechTips]]></description>
			<content:encoded><![CDATA[<p>Recebi hoje por email <a href="http://www.sitepoint.com/books/rails1/freebook.php" title="esse link">esse link</a> e achei interessante compartilhar.<br />
É um link de download de um livro completo e gratuito de Ruby on Rails.<br />
Quem tiver interesse, deve ser rápido pois esse download estará disponível somente por mais alguns dias (contador no site acima).</p>
<p>Abraço</p>
<p><center>&copy; <a href="http://testdrive.bludata.com.br">TechTips</a></center></p>]]></content:encoded>
			<wfw:commentRss>http://www.techtips.com.br/programacao/ruby-on-rails-livro-gratuito/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>JavaScript &#8211; Nem Java, nem Script &#8211; Uma Interessante Linguagem Orientada a Objetos (sem classes)</title>
		<link>http://www.techtips.com.br/programacao/orientacao-a-objetos/javascript-nem-java-nem-script-uma-interessante-linguagem-orientada-a-objetos-sem-classes/</link>
		<comments>http://www.techtips.com.br/programacao/orientacao-a-objetos/javascript-nem-java-nem-script-uma-interessante-linguagem-orientada-a-objetos-sem-classes/#comments</comments>
		<pubDate>Sat, 19 May 2007 21:12:02 +0000</pubDate>
		<dc:creator>Leonel Togniolli</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>

		<guid isPermaLink="false">http://www.techtips.com.br/semcategoria/javascript-nem-java-nem-script-uma-interessante-linguagem-orientada-a-objetos-sem-classes/</guid>
		<description><![CDATA[Já escrevi sobre o Qooxdoo, uma biblioteca GUI para a web feita em JavaScript. Quem não quem conhece JavaScript, pode ficar impressionado com as capacidades desse framework orientado a objeto. E vai também, sem dúvida, ficar com as mãos amarradas no momento que tentar escrever alguma coisa com ele. Antes de nos aprofundarmos em Qooxdoo, [...]]]></description>
			<content:encoded><![CDATA[<p>Já escrevi sobre o <a href="http://www.techtips.com.br/desenvolvimento-web/ajax/clientes-ricos-ajax-na-web-com-qooxdoo/">Qooxdoo</a>, uma biblioteca GUI para a web feita em JavaScript. Quem não quem conhece JavaScript, pode ficar impressionado com as capacidades desse framework orientado a objeto. E vai também, sem dúvida, ficar com as mãos amarradas no momento que tentar escrever alguma coisa com ele. Antes de nos aprofundarmos em Qooxdoo, temos que conhecer um pouco de JavaScript.</p>
<p>Este artigo é uma introdução de JavaScript, para você deixar de vê-la como uma forma de fazer pequenos scripts em browser e passar a reconhecer o potencial que ela tem, como uma linguagem orientada a objetos, com recursos únicos muito bons.</p>
<p>Primeiramente, é necessário se desligar do nome bastante enganador: JavaScript não tem herança alguma de Java &#8211; chamava LiveScript quando foi implementada pela primeira vez pela Netscape (e Mocha, antes disso). Ganhou o prefixo Java em uma jogada de marketing da Netscape aliada com a Sun, sem ter ganhado nada que a tornasse mais perto dessa outra linguagem da Sun, que estava começando a entrar na moda em 1995.</p>
<p>O&nbsp;sufixo Script do nome também dá uma impressão errada. Ela não tem mais de &#8220;script&#8221; do que outra linguagens interpretadas por aí. Apesar do host mais comum que estamos acostumados a ver JavaScript executando são os browsers, não existe nada na definição da linguagem que a limite nesse sentido.</p>
<p>Tendo isso esclarecido, podemos partir para JavaScript. É uma linguagem dinâmica, fracamente tipada, com orientação a objetos baseada em prototipos. O que isso quer dizer?</p>
<p>A primeira parte, linguagem dinâmica, é algo que está na moda ultimamente. Uma linguagem dinâmica é uma que é capaz de alterar sua estrutura durante a execução, algo que em linguagens tradicionais, acontece durante a compilação. Isso quer dizer que JavaScript pode criar novos tipos, adicionar métodos em objetos existentes. </p>
<p>Ser fracamente tipada é uma faca de dois gumes &#8211; variáveis não possuem tipos estritamente definidos, funções não obrigam tipos de parâmetros pré-determinados (nem a quantidade deles). Permite uma programação muito mais flexível do que seria possível em uma linguagem fortemente tipada, dando um poder muito grande para JavaScript, mas requer uma atenção maior do programador.</p>
<p>Finalmente, é orientada a objetos. Não tem, porém, classes ou tipos, como a orientação a objetos tradicional. Como pode ser orientada a objetos sem classes? JavaScript segue o modelo de orientação a objetos Prototipal. Nesse modelo, objetos são construídos, funções e campos são adicionados neles, e eles servem de protótipo, como uma forma, para outros objetos descendentes, sendo clonados e permitindo que funcionalidade seja adicionada na instância descendente. É uma modelo de difícil compreensão para quem está acostumado com a forma clássica, mas que, como os outros recursos que vimos até agora, dá para JavaScript um potencial enorme de solução de problemas de uma forma diferente da qual estamos acostumados.</p>
<p>Em JavaScript, tudo é um objeto. Inclusive funções são objetos, podendo ter membros, e métodos (outras funções). Outra característica interessante é que todos os objetos não são nada mais que Hashes &#8211; estruturas nome=valor contendo todos os campos e métodos da classe, que podem ser enumerados e alterados em qualquer momento que for necessário.&nbsp;</p>
<p>Na próxima parte, vamos criar alguns objetos em JavaScript para aprender o básico da sintaxe, e descobrir o que é lambda e closures, recursos que tornam a implementações&nbsp;de funções um tanto mais fácil.</p>
<p><center>&copy; <a href="http://www.techtips.com.br">TechTips</a></center></p>]]></content:encoded>
			<wfw:commentRss>http://www.techtips.com.br/programacao/orientacao-a-objetos/javascript-nem-java-nem-script-uma-interessante-linguagem-orientada-a-objetos-sem-classes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Criando um Redimensionador de Imagens em PHP</title>
		<link>http://www.techtips.com.br/programacao/orientacao-a-objetos/criando-um-redimensionador-de-imagens/</link>
		<comments>http://www.techtips.com.br/programacao/orientacao-a-objetos/criando-um-redimensionador-de-imagens/#comments</comments>
		<pubDate>Tue, 15 May 2007 20:19:56 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.techtips.com.br/semcategoria/criando-um-redimensionador-de-imagens/</guid>
		<description><![CDATA[Muitos sites hoje vistos pela web tem algum álbum de fotos ou algo parecido neles, então neste artigo veremos como fazer um redimensionador de imagens em PHP para que possa ser utilizado para padronizar o tamanho das imagens postadas no mesmo, inclusive podendo colocar uma &#8220;marca d&#8217;agua&#8221; nas imagens para os casos específicos e até [...]]]></description>
			<content:encoded><![CDATA[<p>Muitos sites hoje vistos pela web tem algum álbum de fotos ou algo parecido neles, então neste artigo veremos como fazer um redimensionador de imagens em PHP para que possa ser utilizado para padronizar o tamanho das imagens postadas no mesmo, inclusive podendo colocar uma &#8220;marca d&#8217;agua&#8221; nas imagens para os casos específicos e até rotacioná-las.</p>
<p>Vale lembrar que o PHP, ou melhor, a biblioteca de tratamento de imagens do PHP chamada de GD2, não é e não tem o objetivo de ser um &#8220;Photoshop&#8221;, mas supre as necessidades básicas para o tratamento de imagens para WEB. Devemos também saber que o resultado do uso desta biblioteca depende muito da imagem que será tratada, e que aumentar uma imagem através da biblioteca pode fazer com que perca significadamente sua qualidade.</p>
<p>Muito bem, para começarmos precisamos que a biblioteca GD2 do PHP esteja &#8220;descomentada&#8221; no arquivo PHP.INI no caso de usuários Windows, para usuários Linux será necessário recompilar o PHP com a biblioteca.</p>
<p>Com a GD2 habilitada, vamos a classe que será responsável pelo redimensionamento de imagens:</p>
<p><font size="2" face="Courier New">&lt;?php<br />
/**<br />
 * Classe para redimensionamento de imagens com opções para rotacionar e adicionar marca d&#8217;agua.<br />
 * <br />
 * @author Cesar Rodrigo Bagatoli -&gt; e-mail: crbdigo@gmail.com<br />
 * @version 1.0 em 15/05/2007.<br />
 *<br />
 */<br />
class Resize {<br />
    /**<br />
     * Nome da imagem com seu caminho completo, dentro do servidor.<br />
     *<br />
     * @var string<br />
     */<br />
    protected $image;</font><font size="2" face="Courier New">    /**<br />
     * Tipo da Imagem setado automaticamente (1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP,<br />
     * 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC,<br />
     * 14 = IFF, 15 = WBMP, 16 = XBM).<br />
     * Somente serão aceitos os tipos 1, 2 e 3.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $imageType;</font><font size="2" face="Courier New">    /**<br />
     * Tamanho vertical da imagem original.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $height;</font><font size="2" face="Courier New">    /**<br />
     * Tamanho horizontal da imagem original.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $width;</p>
<p>    /**<br />
     * Nome da imagem com seu caminho completo no servidor que será feita uma cópia da original, para preservar a original.<br />
     *<br />
     * @var string<br />
     */<br />
    protected $newImage;<br />
    <br />
    /**<br />
     * Novo tamanho vertical da imagem.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $newHeight;</p>
<p>    /**<br />
     * Novo tamanho horizontal da imagem.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $newWidth;</p>
<p>    /**<br />
     * Nome da imagem com seu caminho completo no servidor que será utilizada como marca d&#8217;água.<br />
     *<br />
     * @var string<br />
     */<br />
    protected $waterMarkImage;<br />
    <br />
    /**<br />
     * Tipo da imagem da marca d&#8217;agua setado automaticamente (1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP,<br />
     * 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC,<br />
     * 14 = IFF, 15 = WBMP, 16 = XBM).<br />
     * Somente serão aceitos os tipos 1, 2 e 3.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $waterMarkImageType;<br />
    <br />
    /**<br />
     * Tamanho vertical da marca d&#8217;agua.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $waterMarkImageHeight;<br />
    <br />
    /**<br />
     * Tamanho horizontal da marca d&#8217;agua.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $waterMarkImageWidth;<br />
    <br />
    /**<br />
     * Posição onde a marca d&#8217;agua será colocada.<br />
     * Valores poderão ser &#8217;topLeft&#8217;, &#8217;topCenter&#8217;, &#8217;topRight&#8217;, &#8217;bottomLeft&#8217;, &#8217;bottomCenter&#8217;, &#8217;bottomRight&#8217; ou &#8217;center&#8217;.<br />
     *<br />
     * @var string<br />
     */<br />
    protected $waterMarkPosition = &#8217;bottomRight&#8217;;<br />
    <br />
    /**<br />
     * Opacidade da marca d&#8217;agua.<br />
     * Valores de 0 a 100.<br />
     *<br />
     * @var integer<br />
     */<br />
    protected $waterMarkOpacity = 50;<br />
    <br />
    /**<br />
     * 1 para redimensionar proporcionalmente a imagem, 0 para permitir distorção.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $proportional = 1;</p>
<p>    /**<br />
     * H para redimensinar proporcionalmente a imagem com base na Horizontal, e V para redimensionar<br />
     * proporcionalmente a imagem com base na Vertical.<br />
     *<br />
     * @var string<br />
     */<br />
    protected $proportionalFlag = &#8217;H';</p>
<p>    /**<br />
     * Numero de graus em que a imagem deverá ser rotacionada.<br />
     * Valor de -360 a 360.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $degrees = 0;</p>
<p>    /**<br />
     * Cor da zona descoberta da imagem após a rotação.<br />
     *<br />
     * @var int<br />
     */<br />
    protected $bgColor = 0;</p>
<p>    /**<br />
     * Construtor<br />
     *<br />
     * @param string $image<br />
     * @access public<br />
     * @return boolean<br />
     */<br />
    public function Resize($image) {<br />
        $this-&gt;setImage($image);</p>
<p>        return true;<br />
    }</p>
<p>    /**<br />
     * Seta uma nova imagem para ser tratada e pega as dimensões dela junto com seu tipo.<br />
     *<br />
     * @param string $image<br />
     * @access public<br />
     */<br />
    public function setImage($image) {<br />
        $this-&gt;image = $image;</p>
<p>        try {<br />
            $tmp = getimagesize($this-&gt;image);<br />
            $this-&gt;width  = $tmp[0];<br />
            $this-&gt;height  = $tmp[1];<br />
            $this-&gt;imageType = $tmp[2];<br />
        }<br />
        catch (Exception $e) {<br />
            throw new Exception(&#8220;Não foi possível identificar o tamanho da imagem original.&#8221;);<br />
        }<br />
    }</p>
<p>    /**<br />
     * Retorna o caminho e nome da imagem atual.<br />
     *<br />
     * @return string<br />
     * @access public<br />
     */<br />
    public function getImage() {<br />
        return $this-&gt;image;<br />
    }</p>
<p>    /**<br />
     * Seta uma imagem para ser criada como cópia da original.<br />
     *<br />
     * @param string $newImage<br />
     * @access public<br />
     */<br />
    public function setNewImage($newImage) {<br />
        $this-&gt;newImage = $newImage;<br />
    }</p>
<p>    /**<br />
     * Retorna o caminho e nome da imagem cópia.<br />
     *<br />
     * @return string<br />
     * @access public<br />
     */<br />
    public function getNewImage() {<br />
        return $this-&gt;newImage;<br />
    }<br />
    <br />
    /**<br />
     * Seta uma imagem para ser utilizada como marca d&#8217;água.<br />
     *<br />
     * @param string $waterMarkImage<br />
     * @access public<br />
     */<br />
    public function setWaterMarkImage($waterMarkImage) {<br />
        $this-&gt;waterMarkImage = $waterMarkImage;<br />
    }<br />
    <br />
    /**<br />
     * Retorna o caminho e nome da imagem para marca d&#8217;água.<br />
     *<br />
     * @return string<br />
     * @access public<br />
     */<br />
    public function getWaterMarkImage() {<br />
        return $this-&gt;waterMarkImage;<br />
    }<br />
    <br />
    /**<br />
     * Seta a posição em que a marca d&#8217;agua aparecerá na imagem.<br />
     *<br />
     * @param string $waterMarkPosition<br />
     * @access public<br />
     */<br />
    public function setWaterMarkPosition($waterMarkPosition) {<br />
        if($waterMarkPosition == &#8217;topLeft&#8217; || <br />
           $waterMarkPosition == &#8217;topCenter&#8217; || <br />
           $waterMarkPosition == &#8217;topRight&#8217; || <br />
           $waterMarkPosition == &#8217;bottomLeft&#8217; || <br />
           $waterMarkPosition == &#8217;bottomCenter&#8217; || <br />
           $waterMarkPosition == &#8217;bottomRight&#8217; || <br />
           $waterMarkPosition == &#8217;center&#8217;) {<br />
            $this-&gt;waterMarkPosition = $waterMarkPosition;<br />
        }<br />
        else {<br />
            throw new Exception(&#8220;Posição da marca d&#8217;agua é inválida.&#8221;);<br />
        }<br />
    }<br />
    <br />
    /**<br />
     * Retorna a posição em que a marca d&#8217;agua deve ser colocada.<br />
     *<br />
     * @return string<br />
     * @access public<br />
     */<br />
    public function getWaterMarkPosition() {<br />
        return $this-&gt;waterMarkPosition;<br />
    }<br />
    <br />
    /**<br />
     * Seta a opacidade da marca d&#8217;agua.<br />
     * Valores de 0 a 100.<br />
     *<br />
     * @param int $waterMarkOpacity<br />
     * @access public<br />
     */<br />
    public function setWaterMarkOpacity($waterMarkOpacity) {<br />
        if($waterMarkOpacity &gt;= 0 &amp;&amp; $waterMarkOpacity &lt;= 100) {<br />
            $this-&gt;waterMarkOpacity = $waterMarkOpacity;<br />
        }<br />
        else {<br />
            throw new Exception(&#8220;Opacidade informada é inválida. Use valores de 0 a 100.&#8221;);<br />
        }<br />
    }<br />
    <br />
    /**<br />
     * Retorna a opacidade que a marca d&#8217;agua deverá ter.<br />
     *<br />
     * @return int<br />
     * @access public<br />
     */<br />
    public function getWaterMarkOpacity() {<br />
        return $this-&gt;waterMarkOpacity;<br />
    }</p>
<p>    /**<br />
     * Seta o tamanho para o qual a imagem (original ou cópia) será redimensionada.<br />
     *<br />
     * @param int $newHeight<br />
     * @param int $newWidth<br />
     * @access public<br />
     */<br />
    public function setNewSize($newHeight, $newWidth) {<br />
        $this-&gt;newHeight = $newHeight;<br />
        $this-&gt;newWidth = $newWidth;<br />
    }</p>
<p>    /**<br />
     * 1 para redimensionar proporcionalmente a imagem, 0 para permitir distorção.<br />
     *<br />
     * @param int $proportional<br />
     * @access public<br />
     */<br />
    public function setProportional($proportional) {<br />
        $this-&gt;proportional = $proportional;<br />
    }</p>
<p>    /**<br />
     * Retorna se é para ser proporcional ou não.<br />
     *<br />
     * @return integer<br />
     * @access public<br />
     */<br />
    public function getProportional() {<br />
        return $this-&gt;proportional;<br />
    }</p>
<p>    /**<br />
     * H para redimensinar proporcionalmente a imagem com base na Horizontal, e V para redimensionar<br />
     * proporcionalmente a imagem com base na Vertical.<br />
     *<br />
     * @param string $proportionalFlag<br />
     * @access public<br />
     */<br />
    public function setProportionalFlag($proportionalFlag) {<br />
        $this-&gt;proportionalFlag = $proportionalFlag;<br />
    }</p>
<p>    /**<br />
     * Retorna a base pela qual será mantida a proporção de redimensionamento.<br />
     *<br />
     * @return string<br />
     * @access public<br />
     */<br />
    public function getProportionalFlag() {<br />
        return $this-&gt;proportionalFlag;<br />
    }<br />
    <br />
    /**<br />
     * Seta quantos graus em que a imagem deverá ser rotacionada.<br />
     * Valor de -360 a 360.<br />
     *<br />
     * @param int $degrees<br />
     * @access public<br />
     */<br />
    public function setDegrees($degrees) {<br />
        if($degrees &gt; 360 || $degrees &lt; -360) {<br />
            throw new Exception(&#8220;Ângulo informado incorreto. Valor aceito é de -360 a 360.&#8221;);<br />
        }<br />
        $this-&gt;degrees = $degrees;<br />
    }<br />
    <br />
    /**<br />
     * Retorna o numero de graus em que a imagem deverá ser rotacionada.<br />
     *<br />
     * @return int<br />
     * @access public<br />
     */<br />
    public function getDegrees() {<br />
        return $this-&gt;degrees;<br />
    }<br />
    <br />
    /**<br />
     * Seta a cor de fundo que a zona descoberta da imagem, depois de rotacionada, deverá ter.<br />
     *<br />
     * @param int $bgColor<br />
     * @access public<br />
     */<br />
    public function setBgColor($bgColor) {<br />
        $this-&gt;bgColor = $bgColor;<br />
    }<br />
    <br />
    /**<br />
     * Retorna a cor de fundo que a zona descoberta da imagem, depois de rotacionada, deverá ter.<br />
     *<br />
     * @return int<br />
     * @access public<br />
     */<br />
    public function getBgColor() {<br />
        return $this-&gt;bgColor;<br />
    }</p>
<p>    /**<br />
     * Faz uma cópia da imagem original e seta ela como $image para ser utilizada preservando a original.<br />
     *<br />
     * @return boolean<br />
     * @access private<br />
     * @uses setImage()<br />
     * @uses getImage()<br />
     * @uses setNewImage()<br />
     * @uses getNewImage()<br />
     */<br />
    private function copyImage() {<br />
        if(!empty($this-&gt;image) &amp;&amp; !empty($this-&gt;newImage)) {<br />
            if(!copy($this-&gt;getImage(), $this-&gt;getNewImage())) {<br />
                throw new Exception(&#8220;Não foi possível copiar o arquivo.&#8221;);<br />
            }<br />
            else {<br />
                $this-&gt;setImage($this-&gt;getNewImage());<br />
                $this-&gt;setNewImage(&#8220;&#8221;);<br />
                return true;<br />
            }<br />
        }<br />
        else {<br />
            throw new Exception(&#8220;Erro. Verifique os atributos &#8217;image&#8217; e &#8217;newImage&#8217;.&#8221;);<br />
        }<br />
    }<br />
    <br />
    /**<br />
     * Verifica se todos os atributos necessários para o redimensionamento da imagem foram informados.<br />
     * <br />
     * @access private<br />
     */<br />
    private function verifyAttributes() {<br />
        if(empty($this-&gt;image)) {<br />
            throw new Exception(&#8220;Atributo &#8217;image&#8217; não definido.&#8221;);<br />
        }<br />
        if(empty($this-&gt;imageType)) {<br />
            throw new Exception(&#8220;Atributo &#8217;imageType&#8217; não definido.&#8221;);<br />
        }<br />
        if(empty($this-&gt;height)) {<br />
            throw new Exception(&#8220;Atributo &#8217;height&#8217; não definido.&#8221;);<br />
        }<br />
        if(empty($this-&gt;width)) {<br />
            throw new Exception(&#8220;Atributo &#8217;width&#8217; não definido.&#8221;);<br />
        }<br />
        if(empty($this-&gt;newHeight)) {<br />
            throw new Exception(&#8220;Atributo &#8217;newHeight&#8217; não definido.&#8221;);<br />
        }<br />
        if(empty($this-&gt;newWidth)) {<br />
            throw new Exception(&#8220;Atributo &#8217;newWidth&#8217; não definido.&#8221;);<br />
        }<br />
    }</p>
<p>    /**<br />
     * Verifica se todos os atributos necessários para a imagem da marca d&#8217;agua foram informados.<br />
     * <br />
     * @access private<br />
     */<br />
    private function verifyWaterMarkAttributes() {<br />
        if(empty($this-&gt;waterMarkImage)) {<br />
            throw new Exception(&#8220;Atributo &#8217;waterMarkImage&#8217; não definido.&#8221;);<br />
        }<br />
        if(empty($this-&gt;waterMarkImageType)) {<br />
            throw new Exception(&#8220;Atributo &#8217;waterMarkImageType&#8217; não definido.&#8221;);<br />
        }<br />
        if(empty($this-&gt;waterMarkImageHeight)) {<br />
            throw new Exception(&#8220;Atributo &#8217;waterMarkHeight&#8217; não definido.&#8221;);<br />
        }<br />
        if(empty($this-&gt;waterMarkImageWidth)) {<br />
            throw new Exception(&#8220;Atributo &#8217;waterMarkImageWidth&#8217; não definido.&#8221;);<br />
        }<br />
    }</p>
<p>    /**<br />
     * Redimensiona a imagem conforme configurado.<br />
     *<br />
     * @return boolean<br />
     * @access public<br />
     * @uses verifyAttributes()<br />
     * @uses copyImage()<br />
     * @uses getProportional()<br />
     * @uses getProportionalFlag()<br />
     * @uses getImage()<br />
     * @uses getDegrees()<br />
     * @uses getBgColor()<br />
     * @uses getWaterMarkImage()<br />
     * @uses getWaterMarkPosition()<br />
     * @uses verifyWaterMarkAttributes()<br />
     * @uses getWaterMarkOpacity();<br />
     */<br />
    public function make() {<br />
        $this-&gt;verifyAttributes();<br />
        <br />
        /**<br />
         * Faz a cópia da imagem caso tenha sido informado um novo nome de arquivo em &#8217;newImage&#8217;.<br />
         */<br />
        if(!empty($this-&gt;newImage)) {<br />
            $this-&gt;copyImage();<br />
        }<br />
        <br />
        /**<br />
         * Calcula a Proporção para o redimencionamento.<br />
         */<br />
        if($this-&gt;getProportional() == 1) {<br />
            if($this-&gt;getProportionalFlag() == &#8217;H') {<br />
                /**<br />
                 * Calcula o novo tamanho Vertical para ser proporcional.<br />
                 */<br />
                $this-&gt;newHeight = round(($this-&gt;newWidth * $this-&gt;height) / $this-&gt;width);<br />
            }<br />
            elseif($this-&gt;getProportionalFlag() == &#8217;V') {<br />
                /**<br />
                 * Calcula o novo tamanho Horizontal para ser proporcional.<br />
                 */<br />
                $this-&gt;newWidth = round(($this-&gt;newHeight * $this-&gt;width) / $this-&gt;height);<br />
            }<br />
            else {<br />
                throw new Exception(&#8220;Valor incorreto no atributo &#8217;proportionalFlag&#8217;.&#8221;);<br />
            }<br />
        }<br />
        elseif($this-&gt;getProportional() != 0) {<br />
            throw new Exception(&#8220;Valor incorreto no atributo &#8217;proportional&#8217;.&#8221;);<br />
        }<br />
        <br />
        switch ($this-&gt;imageType) {<br />
            case 1:<br />
                $img    = imagecreatefromgif($this-&gt;getImage());<br />
                $newImg = imagecreate($this-&gt;newWidth, $this-&gt;newHeight);<br />
                break;<br />
            case 2:<br />
                $img    = imagecreatefromjpeg($this-&gt;getImage());<br />
                $newImg = imagecreatetruecolor($this-&gt;newWidth, $this-&gt;newHeight);<br />
                break;<br />
            case 3:<br />
                $img    = imagecreatefrompng($this-&gt;getImage());<br />
                $newImg = imagecreatetruecolor($this-&gt;newWidth, $this-&gt;newHeight);<br />
                break;<br />
            default:<br />
                throw new Exception(&#8220;Tipo de imagem informado não é compatível.&#8221;);<br />
                break;<br />
        }<br />
        <br />
        try {<br />
            imagecopyresized($newImg, $img, 0, 0, 0, 0, $this-&gt;newWidth, $this-&gt;newHeight, $this-&gt;width, $this-&gt;height);<br />
        }<br />
        catch (Exception $e) {<br />
            throw new Exception(&#8220;Não foi possível redimensionar a imagem.&#8221;);<br />
        }<br />
        <br />
        /**<br />
         * Gira a imagem.<br />
         */<br />
        if($this-&gt;getDegrees() != 0) {<br />
            try {<br />
                $newImg = imagerotate($newImg, $this-&gt;getDegrees(), $this-&gt;getBgColor());<br />
                /**<br />
                 * Pega os novos valores para &#8217;newHeight&#8217; e &#8217;newWidth&#8217;.<br />
                 */<br />
                $this-&gt;newWidth = imagesx($newImg);<br />
                $this-&gt;newHeight = imagesy($newImg);<br />
            }<br />
            catch (Exception $e) {<br />
                throw new Exception(&#8220;Não foi possível rotacionar a imagem.&#8221;);<br />
            }<br />
        }<br />
        <br />
        /**<br />
         * Adicionar uma marca d&#8217;agua na imagem pronta.<br />
         */<br />
        if(!empty($this-&gt;waterMarkImage)) {<br />
            try {<br />
                $tmp = getimagesize($this-&gt;getWaterMarkImage());<br />
                $this-&gt;waterMarkImageWidth  = $tmp[0];<br />
                $this-&gt;waterMarkImageHeight = $tmp[1];<br />
                $this-&gt;waterMarkImageType   = $tmp[2];<br />
                <br />
                if($this-&gt;waterMarkImageHeight &gt; $this-&gt;newHeight || <br />
                   $this-&gt;waterMarkImageWidth  &gt; $this-&gt;newWidth) {<br />
                    throw new Exception(&#8220;Marca d&#8217;agua é maior que imagem redimensionada.&#8221;);<br />
                }<br />
            }<br />
            catch (Exception $e) {<br />
                throw new Exception(&#8220;Não foi possível identificar o tamanho da imagem da marca d&#8217;agua.&#8221;);<br />
            }<br />
            <br />
            $this-&gt;verifyWaterMarkAttributes();<br />
            <br />
            switch ($this-&gt;waterMarkImageType) {<br />
                case 1:<br />
                    $markImg = imagecreatefromgif($this-&gt;getWaterMarkImage());<br />
                    break;<br />
                case 2:<br />
                    $markImg = imagecreatefromjpeg($this-&gt;getWaterMarkImage());<br />
                    break;<br />
                case 3:<br />
                    $markImg = imagecreatefrompng($this-&gt;getWaterMarkImage());<br />
                    break;<br />
                default:<br />
                    throw new Exception(&#8220;Tipo de imagem da marca d&#8217;agua informado não é compatível.&#8221;);<br />
                    break;<br />
            }<br />
            <br />
            /**<br />
             * Calcula a área onde será colocada a marca d&#8217;agua.<br />
             */<br />
            switch($this-&gt;getWaterMarkPosition()) {<br />
                case &#8217;topLeft&#8217;:<br />
                    $x = 10;<br />
                    $y = 10;<br />
                    break;<br />
                case &#8217;topCenter&#8217;:<br />
                    $x = round(($this-&gt;newWidth / 2) - ($this-&gt;waterMarkImageWidth / 2));<br />
                    $y = 10;<br />
                    break;<br />
                case &#8217;topRight&#8217;:<br />
                    $x = $this-&gt;newWidth - $this-&gt;waterMarkImageWidth - 10;<br />
                    $y = 10;<br />
                    break;<br />
                case &#8217;bottomLeft&#8217;:<br />
                    $x = 10;<br />
                    $y = $this-&gt;newHeight - $this-&gt;waterMarkImageHeight - 10;<br />
                    break;<br />
                case &#8217;bottomCenter&#8217;:<br />
                    $x = round(($this-&gt;newWidth / 2) - ($this-&gt;waterMarkImageWidth / 2));<br />
                    $y = $this-&gt;newHeight - $this-&gt;waterMarkImageHeight - 10;<br />
                    break;<br />
                case &#8217;bottomRight&#8217;:<br />
                    $x = $this-&gt;newWidth - $this-&gt;waterMarkImageWidth - 10;<br />
                    $y = $this-&gt;newHeight - $this-&gt;waterMarkImageHeight - 10;<br />
                    break;<br />
                case &#8217;center&#8217;:<br />
                    $x = round(($this-&gt;newWidth / 2) - ($this-&gt;waterMarkImageWidth / 2));<br />
                    $y = round(($this-&gt;newHeight / 2) - ($this-&gt;waterMarkImageHeight / 2));<br />
                    break;<br />
                default:<br />
                    $x = 10;<br />
                    $y = 10;<br />
            }<br />
            <br />
            /**<br />
             * Adiciona a marca d&#8217;agua na imagem.<br />
             */<br />
            try {<br />
                imagecopymerge($newImg, $markImg, $x, $y, 0, 0, $this-&gt;waterMarkImageWidth, $this-&gt;waterMarkImageHeight, $this-&gt;getWaterMarkOpacity());<br />
            }<br />
            catch (Exception $e) {<br />
                throw new Exception(&#8220;Não foi possível adicionar marca d&#8217;agua.&#8221;);<br />
            }<br />
        }<br />
        <br />
        /**<br />
         * Grava a imagem em arquivo.<br />
         */<br />
        try {<br />
            switch ($this-&gt;imageType) {<br />
             case 1:<br />
             imagegif($newImg, $this-&gt;getImage());<br />
             break;<br />
             case 2:<br />
             imagejpeg($newImg, $this-&gt;getImage(), 90);<br />
             break;<br />
             case 3:<br />
             imagepng($newImg, $this-&gt;getImage());<br />
             break;<br />
             default:<br />
                 throw new Exception(&#8220;Tipo de imagem informado não é compatível.&#8221;);<br />
             break;<br />
            }<br />
        }<br />
        catch (Exception $e) {<br />
            throw new Exception($e);<br />
        }<br />
        <br />
        return true;<br />
    }<br />
}<br />
?&gt;</p>
<p>Veja abaixo como é de facil utilização a classe que acabamos de criar:</p>
<p><font size="2" face="Courier New">try {<br />
    $obj = new Resize(&#8220;imagem.jpg&#8221;);<br />
    $obj-&gt;setNewImage(&#8220;novaImagem.jpg&#8221;);<br />
    $obj-&gt;setWaterMarkImage(&#8220;marcaDagua.gif&#8221;);<br />
    $obj-&gt;setWaterMarkOpacity(50);<br />
    $obj-&gt;setWaterMarkPosition(&#8216;bottomCenter&#8217;);<br />
    $obj-&gt;setProportionalFlag(&#8216;H&#8217;);<br />
    $obj-&gt;setProportional(1);<br />
    $obj-&gt;setDegrees(90);<br />
    $obj-&gt;setNewSize(500, 500);<br />
    $obj-&gt;make();<br />
}<br />
catch (Exception $e) {<br />
    die($e);<br />
}</font></p>
<p></font><font face="Courier New"><font face="Verdana">Pronto, acabamos tudo que é preciso para redimensionar as imagens em um site PHP.</font></font></p>
<p><center>&copy; <a href="http://www.cesar.inf.br">TechTips</a></center></p>]]></content:encoded>
			<wfw:commentRss>http://www.techtips.com.br/programacao/orientacao-a-objetos/criando-um-redimensionador-de-imagens/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Delphi Video Aula : Padronizando sistemas com Frames</title>
		<link>http://www.techtips.com.br/programacao/delphi/delphi-video-aula-padronizando-sistemas-com-frames/</link>
		<comments>http://www.techtips.com.br/programacao/delphi/delphi-video-aula-padronizando-sistemas-com-frames/#comments</comments>
		<pubDate>Fri, 11 May 2007 21:51:29 +0000</pubDate>
		<dc:creator>leosimas</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[VCL/RTL]]></category>
		<category><![CDATA[Video Aulas]]></category>

		<guid isPermaLink="false">http://www.techtips.com.br/semcategoria/delphi-video-aula-padronizando-sistemas-com-frames/</guid>
		<description><![CDATA[Olá pessoal!Está é minha&#160;terceira video-aula sobre delphi para o TechTips. Nesta video aula, vocês poderão ver o quanto é util criar frames padronizados para cadastro e consulta de dados de uma tabela.Dessa forma, a produtividade aumenta imensamente e é uma opção aos famosos geradores de sistemas que existem por aí. Para ver a video-aula, clique [...]]]></description>
			<content:encoded><![CDATA[</p>
<p>Olá pessoal!<br />Está é minha&nbsp;terceira video-aula sobre delphi para o TechTips.
<p>Nesta video aula, vocês poderão ver o quanto é util criar frames padronizados para cadastro e consulta de dados de uma tabela.<br />Dessa forma, a produtividade aumenta imensamente e é uma opção aos famosos geradores de sistemas que existem por aí.<br /> 
<p>Para ver a video-aula, <a href="http://www.techtips.com.br/wp-content/uploads/VideoAulas/FramesCadastro/FramesCadastro.html">clique aqui</a>.
<p><a href="http://delphi.wikispaces.com/space/showimage/framescadastro.jpg"><img height="180" src="http://www.techtips.com.br/wp-content/uploads/2007/05/WindowsLiveWriter/DelphiVideoAulaPadronizandosistemascomFr_10B6F/framescadastro12.jpg" width="240" border="0"></a>
<p>Ps: Qualquer semelhança com nomes é pura coincidência.</p>
<p><center>&copy; <a href="http://">TechTips</a></center></p>]]></content:encoded>
			<wfw:commentRss>http://www.techtips.com.br/programacao/delphi/delphi-video-aula-padronizando-sistemas-com-frames/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Delphi Basics &#8211; Constructors, Aula 1</title>
		<link>http://www.techtips.com.br/programacao/delphi-basics-constructors-aula-1/</link>
		<comments>http://www.techtips.com.br/programacao/delphi-basics-constructors-aula-1/#comments</comments>
		<pubDate>Sun, 15 Apr 2007 10:29:31 +0000</pubDate>
		<dc:creator>Alexandre José</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Linguagem Delphi]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Práticas]]></category>

		<guid isPermaLink="false">http://www.techtips.com.br/programacao/delphi-basics-constructors-aula-1/</guid>
		<description><![CDATA[A&#160;partir de hoje iniciarei uma série de artigos que abordam principalmente conceitos básicos de programação na linguagem Delphi. Pretendo nessa série de artigos abordar tudo relacionado à linguagem em si, como classes e objetos, encapsulamento, construtores/destrutores, exceções, hierarquia de classes e por ai em diante. Inicialmente vamos criar uma unit chamada CursoDelphiBasic.pas, esta unit será [...]]]></description>
			<content:encoded><![CDATA[<p>A&nbsp;partir de hoje iniciarei uma série de artigos que abordam principalmente conceitos básicos de programação na linguagem Delphi.</p>
<p>Pretendo nessa série de artigos abordar tudo relacionado à linguagem em si, como classes e objetos, encapsulamento, construtores/destrutores, exceções, hierarquia de classes e por ai em diante. </p>
<p>Inicialmente vamos criar uma unit chamada <strong>CursoDelphiBasic.pas</strong>, esta unit será nossa classe de trabalho durante o desenvolvimento desta série. Sempre no final do artigo você poderá fazer o download da unit atualizada.</p>
<p>A estrutura inicial de nossa unit será esta:</p>
<p>
<pre>unit CursoDelphiBasics;

interface

type
  TCursoDelphiBasics = class
  private
    { Private declarations }
  public
    { Public declarations }
    constructor Create;
  end;

implementation

{ TCursoDelphiBasics }

constructor TCursoDelphiBasics.Create;
begin

end;

end.</pre>
</p>
<p>Para iniciar esta série de artigos vamos começar abordando um pouco os constructors. </p>
<p>Você sabe o que é um constructor?</p>
<p>Provavelmente você já deve ter utilizado o método Create com o objetivo de alocar memória para algum objeto. Este método é um constructor! Um método que você utiliza para inicializar e para alocar memória à uma instância desta mesma classe. Complicado? Claro que não! Vamos criar o construtor da nossa classe?</p>
<p>Dentro da cláusula <strong>public</strong> vamos digitar o seguinte método:</p>
<p><strong>constructor</strong> Create;</p>
<p>Logo após isto digite Ctrl + Shift + C. Repare que abaixo de <strong>implementation</strong> o Delphi criou a estrutura de nosso método:</p>
<p><strong>constructor</strong> TCursoDelphiBasics.Create;<br /><strong>begin</strong> </p>
<p><strong>end</strong>; </p>
<p>Agora você já tem uma classe e o seu constructor! <img src='http://www.techtips.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Para inicializar nossa classe dentro de qualquer form, como por exemplo o Form1, basta implementarmos o seguinte código dentro do OnCreate dele:</p>
<p>
<pre>procedure TForm1.FormCreate(Sender: TObject);
var
  AMinhaClasse : TCursoDelphiBasics;
begin
  AMinhaClasse := TCursoDelphiBasics.Create;
  try

  finally
    AMinhaClasse.Free;
  end;
end;</pre>
</p>
<p>No próximo artigo vamos implementar, parametrizar&nbsp;e abordar os recursos disponíveis na criação do nosso constructor. <a href="http://www.waveobjects.com.br/blog/artigos/source/CursoDelphiBasics_Aula1.rar">Download do fonte atualizado</a>. Até a próxima.</p>
<p><center>&copy; <a href="http://www.waveobjects.com.br/blog">TechTips</a></center></p>]]></content:encoded>
			<wfw:commentRss>http://www.techtips.com.br/programacao/delphi-basics-constructors-aula-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Video Aula &#8211; Frames utilizando Frames</title>
		<link>http://www.techtips.com.br/programacao/delphi/vclrtl/video-aula-frames-utilizando-frames/</link>
		<comments>http://www.techtips.com.br/programacao/delphi/vclrtl/video-aula-frames-utilizando-frames/#comments</comments>
		<pubDate>Tue, 27 Mar 2007 21:38:24 +0000</pubDate>
		<dc:creator>leosimas</dc:creator>
				<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[VCL/RTL]]></category>
		<category><![CDATA[Video Aulas]]></category>

		<guid isPermaLink="false">http://www.techtips.com.br/programacao/delphi/vclrtl/video-aula-frames-utilizando-frames/</guid>
		<description><![CDATA[Olá pessoal!Está é minha segunda video-aula sobre delphi para o TechTips. Nesta video aula, vocês poderão ver o quanto é util uma hierarquia de frames que podem utilizar outros frames. Os frames criados na video-aula anterior&#160;foram reutilizados para mostrar mais uma vez como isso é prático. &#160; Para ver a video-aula, clique aqui. &#169; TechTips]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal!<br />Está é minha segunda video-aula sobre delphi para o TechTips.</p>
<p>Nesta video aula, vocês poderão ver o quanto é util uma hierarquia de frames que podem utilizar outros frames. Os frames criados na <a href="http://www.techtips.com.br/arquivos/FramesInterfaces/FramesInterfaces.html">video-aula anterior</a>&nbsp;foram reutilizados para mostrar mais uma vez como isso é prático.</p>
<p>&nbsp;</p>
<p>Para ver a video-aula, <a href="http://www.techtips.com.br/arquivos/FramesEmFrames/FramesEmFrames.html">clique aqui</a>.</p>
<p><a href="http://delphi.wikispaces.com/space/showimage/videoaula02.jpg"><img height="180" src="http://www.techtips.com.br/wp-content/uploads/2007/03/WindowsLiveWriter/VideoAulaFramesutilizandoFrames_10843/videoaula02%5B1%5D%5B3%5D.jpg" width="240" border="0"></a></p>
<p><center>&copy; <a href="http://">TechTips</a></center></p>]]></content:encoded>
			<wfw:commentRss>http://www.techtips.com.br/programacao/delphi/vclrtl/video-aula-frames-utilizando-frames/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Video Aula &#8211; Frames com interfaces</title>
		<link>http://www.techtips.com.br/programacao/delphi/vclrtl/video-aula-frames-com-interfaces/</link>
		<comments>http://www.techtips.com.br/programacao/delphi/vclrtl/video-aula-frames-com-interfaces/#comments</comments>
		<pubDate>Thu, 15 Mar 2007 18:12:54 +0000</pubDate>
		<dc:creator>leosimas</dc:creator>
				<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[VCL/RTL]]></category>
		<category><![CDATA[Video Aulas]]></category>

		<guid isPermaLink="false">http://www.techtips.com.br/programacao/delphi/vclrtl/video-aula-frames-com-interfaces/</guid>
		<description><![CDATA[Olá pessoal!Está é minha primeira video-aula para o techtips. Ela explica a utilização de frames com interfaces.Recomendo usar o fone de ouvido. Para ver a video aula, clique aqui. &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; . &#169; TechTips]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal!<br />Está é minha primeira video-aula para o techtips.</p>
<p>Ela explica a utilização de frames com interfaces.<br />Recomendo usar o fone de ouvido.</p>
<p>Para ver a video aula, <a href="http://www.techtips.com.br/arquivos/FramesInterfaces/FramesInterfaces.html">clique aqui</a>.</p>
<p><a href="http://delphi.wikispaces.com/space/showimage/fi.jpg"><img height="253" src="http://www.techtips.com.br/wp-content/uploads/2007/03/WindowsLiveWriter/VideoAulaFramescominterfaces_D525/fi%5B8%5D3.jpg" width="317" align="left" border="0"></a> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>.</p>
<p><center>&copy; <a href="http://">TechTips</a></center></p>]]></content:encoded>
			<wfw:commentRss>http://www.techtips.com.br/programacao/delphi/vclrtl/video-aula-frames-com-interfaces/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Introdu&#231;&#227;o ao ECO</title>
		<link>http://www.techtips.com.br/programacao/introduo-ao-eco/</link>
		<comments>http://www.techtips.com.br/programacao/introduo-ao-eco/#comments</comments>
		<pubDate>Thu, 18 Jan 2007 17:32:43 +0000</pubDate>
		<dc:creator>Zote</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[ECO]]></category>
		<category><![CDATA[Linguagem Delphi]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.techtips.com.br/programacao/introduo-ao-eco/</guid>
		<description><![CDATA[  ECO &#8211; Enterprise Core Objects, é um framework para persistência de objetos. Você já pensou em como seria bom se precupar com o negócio e não com a tecnologia, não precisar se preocupar com operações de banco de dados (select, insert, update, delete)? Se marcarmos o tempo se investimos nesse tipo de operação, veremos [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>ECO &#8211; Enterprise Core Objects, é um framework para persistência de objetos.</p>
<p>Você já pensou em como seria bom se precupar com o negócio e não com a tecnologia, não precisar se preocupar com operações de banco de dados (select, insert, update, delete)?</p>
<p>Se marcarmos o tempo se investimos nesse tipo de operação, veremos que não é investimento, mas que depois de muito trabalho, é na verdade um pouco perda de tempo. Você poderia ter investido esse recurso numa nova funcionalidade do software.<br />
Voltando ao assunto <img src='http://www.techtips.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  o ECO vem resolver esse tipo de coisa pra gente. Com ele, você se preocupa em resolver o problema do cliente desenvolvendo um software. Operações com banco de dados, você esquece! Do BD você so vai precisar na pior das hipóteses em 3 casos:</p>
<ol>
<li>Criação / configuração.</li>
<li>Backup.</li>
<li>Na pior hipótese, restore.</li>
</ol>
<p>O ECO é uma evolução do bold. Bold era(é?) para Delphi/Win32. ECO é para .NET tanto para Delphi Language tanto para C#.</p>
<p>Em ECO, você trabalha com Classes e Objetos, fazendo a modelagem utilizando UML. Então basicamente, você faz o diagrama de classes, configura qual banco de dados será utlizado, e o ECO faz toda a mágica gerando o código dessas classes pro sistema funcionar! <img src='http://www.techtips.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Estou preparando alguns materiais mostrando como trabalhar com ele, assine nosso RSS para receber novos artigos.</p>
<p>Um abraço e até a próxima!</p>
<p><center>&copy; <a href="http://testdrive.bludata.com.br">TechTips</a></center></p>]]></content:encoded>
			<wfw:commentRss>http://www.techtips.com.br/programacao/introduo-ao-eco/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.688 seconds -->
