Mudanças entre as edições de "SOP29005-2014-1"
Linha 30: | Linha 30: | ||
** [http://www.horstmann.com/ccj2/ccjapp3.html Moving from Java to C++] | ** [http://www.horstmann.com/ccj2/ccjapp3.html Moving from Java to C++] | ||
* Exercício-exemplo feito em aula. [[https://www.dropbox.com/s/422ouog5bczp553/my_first_cpp_program.zip código-fonte]] | * Exercício-exemplo feito em aula. [[https://www.dropbox.com/s/422ouog5bczp553/my_first_cpp_program.zip código-fonte]] | ||
+ | |||
+ | == 18/02: Mais sobre desenvolvimento em C++ com Linux – Herança, métodos e atributos estáticos, bibliotecas == | ||
+ | |||
+ | === Herança === | ||
+ | * http://www.cplusplus.com/doc/tutorial/inheritance/ | ||
+ | |||
+ | Classes em C++ podem ser estendidas, criando novas classes que retêm as característica da classe-base. Este processo, conhecido como herança, envolve uma classe-base e uma classe derivada: a classe derivada '''herda''' os membros da classe-base, sobre os quais ela pode adicionar seus próprios membros. | ||
+ | |||
+ | Por exemplo, imaginemos uma série de classes para descrever dois tipos de polígonos: retângulos e triângulos. Estes dois polígonos têm certas propriedades em comum, como os valores necessários para calcular suas áreas: ambos podem ser descritos simplificadamente com uma altura e uma largura. (ou base). | ||
+ | |||
+ | Isto pode ser representado no formato de classes como uma classe Polygon (polígono) da qual podemos derivar duas outras classes: Rectangle e Triangle: | ||
+ | |||
+ | [[Arquivo:Inheritance.png]] | ||
+ | |||
+ | A classe Polygon poderia conter membros comuns a ambos os tipos de polígonos. Em nosso caso: largura e altura (width e height). E as classes Rectangle e Triangle poderiam ser as classes derivadas, com características específicas que diferenciam um tipo de polígono de outro. | ||
+ | |||
+ | Classes que são derivadas de outras herdam todos os membros '''acessíveis''' da classe-base. Isto significa que se a classe-base inclui um membro A e nós derivamos uma classe dela, e esta nova classe possui um membro B, a classe derivada conterá ambos os membros A e B. | ||
+ | |||
+ | No C++, a relação de herança de duas classes é declarada na classe derivada. A definição de classes derivadas usa a seguinte sintaxe: | ||
+ | |||
+ | <syntaxhighlight lang=cpp> | ||
+ | class classe_derivada : public classe_base | ||
+ | { /*...*/ }; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | O código acima define uma classe com nome ''classe_derivada'', que herda '''publicamente''' a classe com nome ''classe_base''. A palavra reservada ''public'' pode ser substituído por ''protected'' ou ''private'', dependendo do tipo de herança desejado. Este delimitador de acesso limita o nível de acesso aos membros herdados da classe-base: os membros com um nível de acesso mais acessível são herdados com o nível declarado na herança, enquanto os membros com níveis de acesso iguais ou mais restritivos mantém, na classe derivada, os níveis de restrição declarados na classe-base. | ||
+ | |||
+ | <syntaxhighlight lang=cpp> | ||
+ | |||
+ | #include <iostream> | ||
+ | using namespace std; | ||
+ | |||
+ | class Polygon { | ||
+ | protected: | ||
+ | int width, height; | ||
+ | public: | ||
+ | void set_values (int a, int b) | ||
+ | { width=a; height=b;} | ||
+ | }; | ||
+ | |||
+ | class Rectangle: public Polygon { | ||
+ | public: | ||
+ | int area () | ||
+ | { return width * height; } | ||
+ | }; | ||
+ | |||
+ | class Triangle: public Polygon { | ||
+ | public: | ||
+ | int area () | ||
+ | { return width * height / 2; } | ||
+ | }; | ||
+ | |||
+ | int main () { | ||
+ | Rectangle rect; | ||
+ | Triangle trgl; | ||
+ | rect.set_values (4,5); | ||
+ | trgl.set_values (4,5); | ||
+ | cout << rect.area() << '\n'; | ||
+ | cout << trgl.area() << '\n'; | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *'''Experimento 1:''' compile e execute o exemplo acima. | ||
+ | *'''Experimento 2:''' substitua, no exemplo acima, uma herança pública por herança protegida ou privada e verifique o que acontece. | ||
+ | |||
+ | |||
+ | === Métodos e atributos estáticos === | ||
+ | |||
+ | === Espaços de nomes === | ||
+ | |||
+ | === Criando bibliotecas === | ||
+ | |||
+ | === A STD === |
Edição das 07h57min de 18 de fevereiro de 2014
EngTel: Sistemas Operacionais - Diário de Aulas 2014-1
Professor: Arliones Hoeller
Turma: 29005
Encontros: terças e sextas às 9:40.
Atendimento paralelo: segundas às 13:30 e quintas às 8:25.
Endereço web do grupo: https://www.facebook.com/groups/sop29005.ifsc.sj/
Endereço de e-mail da disciplina: sop29005.ifsc.sj@groups.facebook.com
Outros cursos de sistemas operacionais nos quais este curso se baseia:
- Sistemas Operacionais - Ciências da Computação UFSC
- Sistemas Operacionais - Engenharia da Computação UTFPR
- Operating Systems Engineering - Computer Science MIT
Plano de ensino
Diário de Aulas
11/02: Apresentação da disciplina. Histórico, visão geral e estruturas de um SO
- Revolution OS: documentário sobre Linux
- Apresentação sobre histórico visão geral e estruturas básicas de um SO. [slides]
14/02: Finalização do conteúdo anterior e atividades em laboratório: Introdução ao Linux e GCC/G++
- Referência sobre C++: http://www.cplusplus.com/
- Livros sobre C++:
- Tutorial C++
- Exercício-exemplo feito em aula. [código-fonte]
18/02: Mais sobre desenvolvimento em C++ com Linux – Herança, métodos e atributos estáticos, bibliotecas
Herança
Classes em C++ podem ser estendidas, criando novas classes que retêm as característica da classe-base. Este processo, conhecido como herança, envolve uma classe-base e uma classe derivada: a classe derivada herda os membros da classe-base, sobre os quais ela pode adicionar seus próprios membros.
Por exemplo, imaginemos uma série de classes para descrever dois tipos de polígonos: retângulos e triângulos. Estes dois polígonos têm certas propriedades em comum, como os valores necessários para calcular suas áreas: ambos podem ser descritos simplificadamente com uma altura e uma largura. (ou base).
Isto pode ser representado no formato de classes como uma classe Polygon (polígono) da qual podemos derivar duas outras classes: Rectangle e Triangle:
A classe Polygon poderia conter membros comuns a ambos os tipos de polígonos. Em nosso caso: largura e altura (width e height). E as classes Rectangle e Triangle poderiam ser as classes derivadas, com características específicas que diferenciam um tipo de polígono de outro.
Classes que são derivadas de outras herdam todos os membros acessíveis da classe-base. Isto significa que se a classe-base inclui um membro A e nós derivamos uma classe dela, e esta nova classe possui um membro B, a classe derivada conterá ambos os membros A e B.
No C++, a relação de herança de duas classes é declarada na classe derivada. A definição de classes derivadas usa a seguinte sintaxe:
class classe_derivada : public classe_base
{ /*...*/ };
O código acima define uma classe com nome classe_derivada, que herda publicamente a classe com nome classe_base. A palavra reservada public pode ser substituído por protected ou private, dependendo do tipo de herança desejado. Este delimitador de acesso limita o nível de acesso aos membros herdados da classe-base: os membros com um nível de acesso mais acessível são herdados com o nível declarado na herança, enquanto os membros com níveis de acesso iguais ou mais restritivos mantém, na classe derivada, os níveis de restrição declarados na classe-base.
#include <iostream>
using namespace std;
class Polygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b;}
};
class Rectangle: public Polygon {
public:
int area ()
{ return width * height; }
};
class Triangle: public Polygon {
public:
int area ()
{ return width * height / 2; }
};
int main () {
Rectangle rect;
Triangle trgl;
rect.set_values (4,5);
trgl.set_values (4,5);
cout << rect.area() << '\n';
cout << trgl.area() << '\n';
return 0;
}
- Experimento 1: compile e execute o exemplo acima.
- Experimento 2: substitua, no exemplo acima, uma herança pública por herança protegida ou privada e verifique o que acontece.