Java ::: Dicas & Truques ::: Programação Orientada a Objetos |
Como usar o modificador final em classes, variáveis e métodos Java - Programação Orientada a Objetos em JavaQuantidade de visualizações: 13951 vezes |
O modificador final pode ser usado com classes, variáveis e métodos. É claro que o significado varia dependendo do uso. Por exemplo, ao marcarmos uma variável com o modificador final, estamos na verdade criando uma constante, ou seja, uma variável cujo conteúdo não pode ser alterado durante a execução do programa. Veja:
public class Estudos{
static final int VALOR = 45;
public static void main(String args[]){
// vamos tentar alterar o valor da
// constante
VALOR = 10;
}
}
Ao tentarmos compilar este programa teremos a seguinte mensagem de erro:
Estudos.java:7: cannot assign a value to
final variable VALOR
VALOR = 10;
^
1 error
Tenha em mente, porém, que quando uma variável marcada como final é uma referência a um objeto, é a referência que não poderá ser alterada. As propriedades do objeto para a qual ela aponta poderão sofrer alterações, exceto se estes também estiverem marcados como final. Quando aplicado a classes, o modificador final garante que a classe não poderá ser extendida, ou seja, não é possível criar uma classe derivada a partir de uma classe marcada como final. Veja:
// superclasse
final class Pessoa{
public String nome;
}
// subclasse
class Aluno extends Pessoa{
public String matricula;
}
public class Estudos{
public static void main(String args[]){
// Cria um objeto da classe Aluno
Aluno a = new Aluno();
}
}
Ao tentarmos compilar este código teremos a seguinte mensagem de erro:
Estudos.java:7: cannot inherit from
final Pessoa
class Aluno extends Pessoa{
^
1 error
Um método marcado como final não pode ser sobrescrito. Veja um exemplo:
// superclasse
class Pessoa{
protected String nome;
public final String getNome(){
return this.nome;
}
}
// subclasse
class Aluno extends Pessoa{
// estamos sobrescrevendo o método
// herdado da superclasse
public final String getNome(){
return "Aluno: " + this.nome;
}
}
public class Estudos{
public static void main(String args[]){
// Cria um objeto da classe Aluno
Aluno a = new Aluno();
}
}
Ao tentarmos compilar este código teremos a seguinte mensagem de erro:
Estudos.java:14: getNome() in Aluno cannot
override getNome() in Pessoa; overriden method is final
public final String getNome(){
^
1 error
Resumindo: variáveis marcadas com final não poder sofrer alterações. Classes marcadas como final não podem ter classes derivadas. Métodos marcados como final não podem ser sobrescritos. |
Revit C# ::: Dicas & Truques ::: Colunas e Pilares |
Como listar os tipos de colunas e pilares disponíveis no Revit usando a Revit C# APIQuantidade de visualizações: 504 vezes |
|
Nesta dica mostrarei como podemos obter e retorna uma lista com as colunas e pilares disponíveis na sua instalação do Revit. Esse passo é muito importante quando precisamos informar o id do símbolo de família, ou seja, o tipo de coluna ou pilar que queremos criar, em um determinado momento, via programação Revit C# API. O primeiro passo é acessar o documento atual do Revit usando uma chamada à this.ActiveUIDocument.Document. Em seguida nós obtemos um objeto FilteredElementCollector para filtrar e retornar os símbolos de família que se enquadrem na categoria OST_StructuralColumns. Para finalizar, nós convertemos os elementos Element em FamilySymbol. Veja o código completo para o exemplo:
using System;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI.Selection;
using System.Collections.Generic;
using Autodesk.Revit.DB.Architecture;
using System.Linq;
namespace Estudos {
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.
TransactionMode.Manual)]
[Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")]
public partial class ThisApplication {
private void Module_Startup(object sender, EventArgs e) {
// vamos obter uma referência ao Document ativo
Document doc = this.ActiveUIDocument.Document;
// vamos obter um FilteredElementCollector contendo apenas
// elementos que sejam ElementType e pertençam à categoria
// OST_StructuralColumns
try {
FilteredElementCollector elementos = new FilteredElementCollector(doc)
.WhereElementIsElementType().OfCategory(BuiltInCategory.OST_StructuralColumns);
String lista = "";
// vamos percorrer os elementos retornados
foreach(Element elemento in elementos) {
// vamos converter o Element em FamilySymbol
FamilySymbol coluna = elemento as FamilySymbol;
// agora montamos a lista de colunas (ou pilares)
lista = lista + "Id: " + elemento.Id.IntegerValue + "; Nome: "
+ elemento.Name + "; Tipo: " + elemento.Category.Name +
"; Família: " + coluna.Family.Name + "\n";
}
// mostramos o resultado
TaskDialog.Show("Aviso", lista);
}
catch (Exception ex) {
TaskDialog.Show("Aviso", "Erro: " + ex.Message);
}
}
private void Module_Shutdown(object sender, EventArgs e) {
// para fazer alguma limpeza de memória ou algo assim
}
#region Revit Macros generated code
private void InternalStartup() {
this.Startup += new System.EventHandler(Module_Startup);
this.Shutdown += new System.EventHandler(Module_Shutdown);
}
#endregion
}
}
Ao executar este código Revit C# nós teremos o seguinte resultado: Id: 12190; Nome: UC305x305x97; Tipo: Pilares estruturais; Família: UC-Universal Columns-Column Id: 355634; Nome: 80 x 50; Tipo: Pilares estruturais; Família: Pila de Concreto - Retangular Id: 355636; Nome: 50 x 50; Tipo: Pilares estruturais; Família: Pila de Concreto - Retangular |
jQuery ::: Dicas & Truques ::: Atributos ou Propriedades HTML |
Apostila jQuery - Como substituir uma classe por outra em um elemento HTML usando os métodos removeClass() e addClass() do jQueryQuantidade de visualizações: 14543 vezes |
|
Muitos métodos do jQuery retornam um objeto jQuery que pode ser usado para fins de encadeamento de chamadas de métodos. Podemos tirar proveito disso para trocar as classes de um elemento HTML de forma bem simples. Sabemos que os métodos removeClass() e addClass() retornam um objeto jQuery. Assim, o trecho de código abaixo é perfeitamente válido:
<script type="text/javascript">
<!--
function trocarClasse(){
// troca a classe "destaque" do parágrafo
// com o id "parag" pela classe "destaque2"
$('#parag').removeClass("destaque")
.addClass("destaque2");
}
//-->
</script>
|
GNU Octave ::: Desafios e Lista de Exercícios Resolvidos ::: Pesquisa Operacional |
Exercício Resolvido de Octave - Programação Linear - Um fazendeiro decidiu misturar duas rações, a Ração X e a Ração Y. Cada porção de ração dada aos animaisQuantidade de visualizações: 607 vezes |
|
Pergunta/Tarefa: Este exercício de Octave aborda o uso da função glpk() para resolver um problema de Pesquisa Operacional usando Programação Linear. 1) Um fazendeiro decidiu misturar duas rações, a Ração X e a Ração Y. Cada porção de ração dada aos animais exige 60g de proteína e 30g de gordura. A Ração X possui 15g de proteína e 10g de gordura, e custa R$ 80,00 a unidade. A Ração Y apresenta 20g de proteína e 5g de gordura e custa R$ 50,00 a unidade. Quanto de cada ração deve ser usada para minimizar os custos do fazendeiro? Sua saída deverá ser parecida com: A solução para o problema de minimização é: x = 2.40 y = 1.20 O custo mínimo é: 252.00 Antes de passarmos ao código Octave, vamos fazer a modelagem matemática do problema. O primeiro passo é identificar as variáveis. Assim, vamos chamar de x o número de unidades da Ração X e de y o número de unidades da Ração Y. Veja: x = Número de unidades da Ração X y = Número de unidades da Ração Y E então temos a função custo: custo = 80x + 50y A primeira restrição diz respeito à quantidade de proteína em cada porção de ração. Sabendo que a Ração X apresenta 15g de proteína e a Ração Y apresenta 20g de proteína nós temos: R1: 15x + 20y >= 60 (proteína) A segunda restrição diz respeito à quantidade de gordura em cada porção de ração. Sabendo que a Ração X apresenta 10g de gordura e a Ração Y apresenta 5g de gordura nós temos: R2: 10x + 5y >= 30 (gordura) As restrições R3 e R4 dizem respeito à não negatividade das variáveis de decisão: R3: x >= 0 R4: y >= 0 Veja agora o código Octave completo (pesquisa_operacional.m):
# vamos começar definindo a matriz que representa a função de
# minimização
c = [80.0, 50.0]';
# agora a matriz de restrições
A = [15, 20; 10, 5];
b = [60, 30]';
# as restrições de não negatividade e o limite superior
lb = [0, 0]';
ub = [];
# definimos as restrições como limites inferiores
ctype = "LL";
# indicamos que vamos usar variáveis contínuas (não inteiros)
vartype = "CC";
# vamos usar minimização, por isso definimos o valor 1. Se fosse
# maximização o valor seria -1
s = 1;
# definimos os parâmetros adicionais
param.msglev = 1;
param.itlim = 100;
# e chamamos a função glpk()
[xmin, fmin, status, extra] = glpk(c, A, b, lb, ub, ctype, vartype, s, param);
# mostramos a solução para o problema de minimização
printf("A solução para o problema de minimização é:\n\n");
printf("x = %.2f\n", xmin(1));
printf("y = %.2f\n", xmin(2));
# para finalizar vamos mostrar o custo mínimo
printf("\nO custo mínimo é: %.2f\n\n", fmin);
Ao executar o código você perceberá que, para minimizar os custos do fazendeiro, deverão ser usados na mistura 2,4 unidades da Ração X e 1,2 unidades da Raça Y, a um custo mínimo de R$ 252,00. |
Nossas 20 dicas & truques de programação mais populares |
|
VB.NET - Como comparar strings em VB.NET usando o método Equals() da classe String do .NET Framework JavaScript - Como testar se uma string termina com uma determinada substring em JavaScript usando a função endsWith() JavaScript - Como retornar o dia da semana em JavaScript no formato Domingo, Segunda-feira, Terça-feira, etc Java - Exercício Resolvido de Java - Usando um laço for para contar de 0 até 10 e somar todos os valores |
Você também poderá gostar das dicas e truques de programação abaixo |
|
JavaScript - Cookies em JavaScript - Como registrar a quantidade de vezes que o usuário visitou a sua página HTML JavaScript - Como adicionar um método isPar() ao objeto Number do JavaScript que indicará se um número é par ou impar CSS - Como definir uma imagem de fundo para a página HTML em CSS usando a propriedade background-image PHP - Manipulação de texto em PHP - Como acessar e modificar os caracteres individuais de uma string |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
|
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





