Desenvolva a seguinte hierarquia de classes na linguagem de programação Java:
public interface Shape {
public double area();
public double perimeter();
}
public abstract class Quadrilateral implements Shape {
private double a;
private double b;
private double c;
private double d;
public Quadrilateral(double a, double b, double c, double d) {
this.a = validate(a);
this.b = validate(b);
this.c = validate(c);
this.d = validate(d);
}
protected double getA() {
return a;
}
protected double getB() {
return b;
}
protected double getC() {
return c;
}
protected double getD() {
return d;
}
private double validate(double value) {
if (value >= 0) {
return value;
}
throw new IllegalArgumentException();
}
}
public class Square extends Quadrilateral {
public Square(double a) {
super(a, 0.0, 0.0, 0.0);
}
public double getA() {
return super.getA();
}
public double area() {
return Math.pow(getA(), 2.0);
}
public double perimeter() {
return 4.0 * getA();
}
}
public class Rectangle extends Quadrilateral {
public Rectangle(double b, double h) {
super(0.0, b, h, 0.0);
}
public double getB() {
return super.getB();
}
public double getH() {
return super.getC();
}
public double area() {
return getB() * getH();
}
public double perimeter() {
return 2.0 * getB() * getH();
}
}
public class Circle extends Quadrilateral {
public Circle(double r) {
super(r, 0.0, 0.0, 0.0);
}
public double getR() {
return super.getA();
}
public double area() {
return Math.PI * Math.pow(getR(), 2.0);
}
public double perimeter() {
return 2.0 * Math.PI * getR();
}
}
(POSCOMP, 2015) Considere o seguinte código desenvolvido na linguagem de programação Java.
public class Animal {
public void fale() {
System.out.println("...");
}
}
public class Cao extends Animal {
public void fale() {
System.out.println("au au");
}
}
public class Gato extends Animal {
public void fale() {
System.out.println("miau");
}
}
public class GatoPersa extends Gato {
public void fale() {
System.out.println("miauuuu");
}
}
public class Tigre extends Gato {
public void fale() {
super.fale();
System.out.println("rrrrrr");
}
}
public class Principal {
public static void main(String[] args) {
Gato gato = new GatoPersa();
gate.fale();
Animal cao = new Cao();
cao.fale();
Gato tigre = new Tigre();
tigre.fale();
}
}
Ao executar o código, a saída impressa no console é:
a. miauuuu
au au
miau
rrrrrr
b. miauuuu
au au
rrrrrr
c. miau
...
miau
miau
d. miau
au au
rrrrrr
e. miau
...
miau
rrrrrr
(POSCOMP, 2015) O conceito de encapsulamento abordado na programação orientada a objetos pode ser implementado na linguagem de programação Java por meio de:
a. métodos estáticos (static
) e públicos (public
).
b. métodos públicos (public
), privados (private
) e protegidos (protected
).
c. classes abstratas (abstract
) e métodos protegidos (protected
).
d. interfaces (interface
), métodos públicos (public
) e métodos protegidos (protected
).
e. herança (extends
) e métodos estáticos (static
).
Em LISP, funções são elementos de primeira classe, ou seja, é possível fazer com funções qualquer coisa que se pode fazer com outros valores, como por exemplo, armazená-las em variáveis, passá-las como argumento para outras funções ou até mesmo criar novas funções em tempo de execução, permitindo o uso de várias técnicas interessantes na criação de um programa. Considere o conjunto de funções escritas na linguagem de programação LISP apresentadas a seguir.
(defun aux (N)
(if (zerop N)
1
(* N (aux(- n 1)))
)
)
(defun xpto (N P)
(/ (aux N) (* (aux P) (aux (- N P))))
)
A execução da expressão (xpto 4 3)
retorna
a. 1
b. 2
c. 3
d. 4
e. 5
Considere o programa desenvolvido na linguagem de programação Java apresentado a seguir.
public class MyRunnable implements Runnable {
public void run() {
System.out.println("run");
throw new RuntimeException("exception");
}
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start();
System.out.println("end");
}
}
Agora, considere as seguintes saídas a serem apresentadas ao usuário, na execução de um programa.
Quais das saídas apresentadas são plausíveis de serem visualizadas pelo usuário, na execução da classe MyRunnable
.
a. apenas a saída I.
b. apenas a saída II.
c. apenas a saída III.
d. apenas as saídas II e III.
e. apenas as saídas IV e V.
Na lógica matemática e na ciência da computação, lambda cálculo é um sistema formal que estuda funções recursivas computáveis, no que se refere à teoria da computabilidade e fenômenos relacionados, como variáveis ligadas e substituição, sendo o mecanismo formal empregado pela família de linguagens de programação concebida por John McCarthy em 1958, popularmente conhecida como LISP. Desenvolva uma função recursiva computável denominada invert
, escrita na linguagem de programação LISP, que apresente os elementos presentes numa lista na ordem invertida, como por exemplo:
(invert '(A B C D))
(D C B A)
(defun invert (L)
(if (null L)
nil
(append (invert (rest L)) (list (first L)))
)
)
Suponha que existe num banco de dados um número finito de fatos Prolog da forma conhece(A, B)
, onde A e B são duas pessoas distintas, conforme apresentado a seguir.
conhece(fulano, ciclano).
conhece(beltrano, ciclano).
conhece(beltrano, maria).
conhece(jose, maria).
conhece(maria, eva).
conhece(eva, adao).
Escreva um predicado na linguagem de programação Prolog ligadas(A, B)
que é satisfeito quando A e B são ligadas, isto é, existe uma cadeia de conhecidos que leva de A até B, como por exemplo:
?- ligadas(fulano, eva).
true
conhecidos(X, Y) :- conhece(X, Y).
conhecidos(X, Y) :- conhece(Y, X).
ligadas(X, Y) :- conhecidos(X, Y).
ligadas(X, Y) :- ligadas(X, Z), conhecidos(Y, Z).
A linguagem de programação Prolog é uma linguagem de uso geral que é especialmente associada com a inteligência artificial e linguística computacional, se enquadrando no paradigma de programação em lógica matemática. O Prolog é uma linguagem declarativa, significando que em vez de o programa estipular a maneira de chegar à solução, passo a passo (como nas linguagens procedimentais ou imperativas), limita-se a fornecer uma descrição do problema que se pretende computar, utilizando para tal uma coleção base de dados de fatos e de relações lógicas (regras) que exprimem o domínio relacional do problema a ser resolvido. Considere a coleção de regras Prolog apresentado a seguir.
xpto([H] , [R] , P) :- P is H * R.
xpto([H|T], [R|S], P) :- xpto([H], [R], M), xpto(T, S, U), P is M + U.
Qual a saída apresentada para a pergunta
?- xpto([1, 2, 3], [4, 5, 6], N), write(N), nl.
a. 21
b. 32
c. 90
d. 126
e. 720