{
"metadata": {
"name": "Capitulo19_Heranca_simples"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Python para Desenvolvedores](http://ricardoduarte.github.io/python-para-desenvolvedores/#conteudo)\n",
"===================================\n",
"2ª edi\u00e7\u00e3o, revisada e ampliada\n",
"-----------------------------------\n",
"\n",
"Cap\u00edtulo 19: Heran\u00e7a simples\n",
"=============================\n",
"_____________________________\n",
"Heran\u00e7a \u00e9 um mecanismo que a orienta\u00e7\u00e3o a objeto prov\u00ea, com objetivo de facilitar o reaproveitamento de c\u00f3digo. A ideia \u00e9 que as classes sejam constru\u00eddas formando uma hierarquia.\n",
"\n",
"![Exemplo de heran\u00e7a](files/bpypd_diags16.png)\n",
"\n",
"A nova classe pode implementar novos m\u00e9todos e atributos e herdar m\u00e9todos e atributos da classe antiga (que tamb\u00e9m pode ter herdado de classes anteriores), por\u00e9m estes m\u00e9todos e atributos podem substitu\u00eddos na nova classe.\n",
"\n",
"A forma comum de heran\u00e7a \u00e9 chamada de heran\u00e7a simples, na qual a nova classe \u00e9 derivada de apenas uma classe j\u00e1 existente, por\u00e9m \u00e9 poss\u00edvel criar v\u00e1rias classes derivadas, criando uma hierarquia de classes.\n",
"\n",
"Para localizar os m\u00e9todos e atributos, a hierarquia \u00e9 seguida de baixo para cima, de forma similar a busca nos *namespaces* local e global.\n",
"\n",
"![Resolu\u00e7\u00e3o de m\u00e9todo](files/bpypd_diags17.png)\n",
"\n",
"Exemplo de heran\u00e7a simples:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class Pendrive(object):\n",
"\n",
" def __init__(self, tamanho, interface='2.0'):\n",
"\n",
" self.tamanho = tamanho\n",
" self.interface = interface\n",
"\n",
"\n",
"class MP3Player(Pendrive):\n",
"\n",
" def __init__(self, tamanho, interface='2.0', turner=False):\n",
"\n",
" self.turner = turner\n",
" Pendrive.__init__(self, tamanho, interface)\n",
"\n",
"\n",
"mp3 = MP3Player(1024)\n",
"\n",
"print '%s\\n%s\\n%s' % (mp3.tamanho, mp3.interface, mp3.turner)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1024\n",
"2.0\n",
"False\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A classe *MP3Player* herda de *Pendrive* o tamanho e a interface."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
""
],
"output_type": "pyout",
"prompt_number": 1,
"text": [
""
]
}
],
"prompt_number": 1
}
],
"metadata": {}
}
]
}