diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..ac02af2 Binary files /dev/null and b/.DS_Store differ diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a20905f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..fb60291 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..8306744 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/lab-java-interfaces-and-abstract-classes.iml b/lab-java-interfaces-and-abstract-classes.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/lab-java-interfaces-and-abstract-classes.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task1/BigDecimal.class b/out/production/lab-java-interfaces-and-abstract-classes/Task1/BigDecimal.class new file mode 100644 index 0000000..9bd47f7 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task1/BigDecimal.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task1/Main.class b/out/production/lab-java-interfaces-and-abstract-classes/Task1/Main.class new file mode 100644 index 0000000..ee15792 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task1/Main.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Car.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Car.class new file mode 100644 index 0000000..29b3343 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Car.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Drivable.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Drivable.class new file mode 100644 index 0000000..17ac5d0 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Drivable.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Main.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Main.class new file mode 100644 index 0000000..1bf141a Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Main.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Sedan.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Sedan.class new file mode 100644 index 0000000..8a5df08 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Sedan.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Truck.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Truck.class new file mode 100644 index 0000000..ea6ed75 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Truck.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/UtilityVehicle.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/UtilityVehicle.class new file mode 100644 index 0000000..c253f8c Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/UtilityVehicle.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/Main.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Main.class new file mode 100644 index 0000000..d88cde3 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Main.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/Movie.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Movie.class new file mode 100644 index 0000000..e644ae0 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Movie.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/Playable.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Playable.class new file mode 100644 index 0000000..c93d790 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Playable.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/TvSeries.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/TvSeries.class new file mode 100644 index 0000000..7445e1a Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/TvSeries.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/Video.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Video.class new file mode 100644 index 0000000..8591621 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Video.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntArrayList.class b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntArrayList.class new file mode 100644 index 0000000..50968e5 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntArrayList.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntList.class b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntList.class new file mode 100644 index 0000000..e8746ec Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntList.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntVector.class b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntVector.class new file mode 100644 index 0000000..ec27fa4 Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntVector.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/Main.class b/out/production/lab-java-interfaces-and-abstract-classes/Task4/Main.class new file mode 100644 index 0000000..9a31a8c Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task4/Main.class differ diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/README.md b/out/production/lab-java-interfaces-and-abstract-classes/Task4/README.md new file mode 100644 index 0000000..7c5cbb6 --- /dev/null +++ b/out/production/lab-java-interfaces-and-abstract-classes/Task4/README.md @@ -0,0 +1,16 @@ +# Task 4 - IntList + +## Efficiency Comparison + +IntArrayList is more efficient when: +- Memory usage is important +- The list does not grow very quickly +- Fewer resizes are needed + +IntVector is more efficient when: +- The list grows rapidly +- Fewer resize operations are desired +- Performance is more important than memory usage + + +_Special Thanks! U can find More in_ [[**gholipourhadi.com**]()] \ No newline at end of file diff --git a/out/production/untitled/Task1/BigDecimal.class b/out/production/untitled/Task1/BigDecimal.class new file mode 100644 index 0000000..9bd47f7 Binary files /dev/null and b/out/production/untitled/Task1/BigDecimal.class differ diff --git a/out/production/untitled/Task1/Main.class b/out/production/untitled/Task1/Main.class new file mode 100644 index 0000000..ee15792 Binary files /dev/null and b/out/production/untitled/Task1/Main.class differ diff --git a/src/Task1/BigDecimal.java b/src/Task1/BigDecimal.java new file mode 100644 index 0000000..b618084 --- /dev/null +++ b/src/Task1/BigDecimal.java @@ -0,0 +1,15 @@ +package Task1; + +import java.math.RoundingMode; + +public class BigDecimal { + + public static double roundToHundredth(java.math.BigDecimal number) { + return number.setScale(2, RoundingMode.HALF_UP).doubleValue(); + } + + public static double reverseSignAndRoundToTenth(java.math.BigDecimal number) { + java.math.BigDecimal reversed = number.negate(); + return reversed.setScale(1, RoundingMode.HALF_UP).doubleValue(); + } +} \ No newline at end of file diff --git a/src/Task1/Main.java b/src/Task1/Main.java new file mode 100644 index 0000000..d510e07 --- /dev/null +++ b/src/Task1/Main.java @@ -0,0 +1,13 @@ +package Task1; + +public class Main { + public static void main(String[] args) { + java.math.BigDecimal num1 = new java.math.BigDecimal("4.2545"); + java.math.BigDecimal num2 = new java.math.BigDecimal("1.2345"); + java.math.BigDecimal num3 = new java.math.BigDecimal("-45.67"); + + System.out.println(BigDecimal.roundToHundredth(num1)); + System.out.println(BigDecimal.reverseSignAndRoundToTenth(num2)); + System.out.println(BigDecimal.reverseSignAndRoundToTenth(num3)); + } +} \ No newline at end of file diff --git a/src/Task2/Car.java b/src/Task2/Car.java new file mode 100644 index 0000000..c24a2d9 --- /dev/null +++ b/src/Task2/Car.java @@ -0,0 +1,17 @@ +package Task2; + +public abstract class Car implements Drivable { + protected String vinNumber; + protected String make; + protected String model; + protected int mileage; + + public Car(String vinNumber, String make, String model, int mileage) { + this.vinNumber = vinNumber; + this.make = make; + this.model = model; + this.mileage = mileage; + } + + public abstract String getInfo(); +} \ No newline at end of file diff --git a/src/Task2/Drivable.java b/src/Task2/Drivable.java new file mode 100644 index 0000000..2378887 --- /dev/null +++ b/src/Task2/Drivable.java @@ -0,0 +1,6 @@ +package Task2; + +public interface Drivable { + void startEngine(); + void drive(int distance); +} \ No newline at end of file diff --git a/src/Task2/Main.java b/src/Task2/Main.java new file mode 100644 index 0000000..687a97a --- /dev/null +++ b/src/Task2/Main.java @@ -0,0 +1,26 @@ +package Task2; + +public class Main { + public static void main(String[] args) { + + Sedan sedan = new Sedan("111", "Toyota", "Camry", 50000); + UtilityVehicle uv = new UtilityVehicle("222", "Jeep", "Wrangler", 30000, true); + Truck truck = new Truck("333", "Ford", "F-150", 70000, 10000.5); + + System.out.println(sedan.getInfo()); + sedan.startEngine(); + sedan.drive(100); + + System.out.println(); + + System.out.println(uv.getInfo()); + uv.startEngine(); + uv.drive(200); + + System.out.println(); + + System.out.println(truck.getInfo()); + truck.startEngine(); + truck.drive(300); + } +} \ No newline at end of file diff --git a/src/Task2/Sedan.java b/src/Task2/Sedan.java new file mode 100644 index 0000000..d6fd33e --- /dev/null +++ b/src/Task2/Sedan.java @@ -0,0 +1,24 @@ +package Task2; + +public class Sedan extends Car { + + public Sedan(String vinNumber, String make, String model, int mileage) { + super(vinNumber, make, model, mileage); + } + + @Override + public String getInfo() { + return "Sedan: VIN=" + vinNumber + ", Make=" + make + ", Model=" + model + ", Mileage=" + mileage; + } + + @Override + public void startEngine() { + System.out.println("Sedan engine started."); + } + + @Override + public void drive(int distance) { + mileage += distance; + System.out.println("Sedan drove " + distance + " km. Total mileage: " + mileage); + } +} \ No newline at end of file diff --git a/src/Task2/Truck.java b/src/Task2/Truck.java new file mode 100644 index 0000000..b68785b --- /dev/null +++ b/src/Task2/Truck.java @@ -0,0 +1,27 @@ +package Task2; + +public class Truck extends Car { + private double towingCapacity; + + public Truck(String vinNumber, String make, String model, int mileage, double towingCapacity) { + super(vinNumber, make, model, mileage); + this.towingCapacity = towingCapacity; + } + + @Override + public String getInfo() { + return "Truck: VIN=" + vinNumber + ", Make=" + make + ", Model=" + model + ", Mileage=" + mileage + + ", Towing Capacity=" + towingCapacity; + } + + @Override + public void startEngine() { + System.out.println("Truck engine started."); + } + + @Override + public void drive(int distance) { + mileage += distance; + System.out.println("Truck drove " + distance + " km. Total mileage: " + mileage); + } +} \ No newline at end of file diff --git a/src/Task2/UtilityVehicle.java b/src/Task2/UtilityVehicle.java new file mode 100644 index 0000000..1e20f6d --- /dev/null +++ b/src/Task2/UtilityVehicle.java @@ -0,0 +1,27 @@ +package Task2; + +public class UtilityVehicle extends Car { + private boolean fourWheelDrive; + + public UtilityVehicle(String vinNumber, String make, String model, int mileage, boolean fourWheelDrive) { + super(vinNumber, make, model, mileage); + this.fourWheelDrive = fourWheelDrive; + } + + @Override + public String getInfo() { + return "UtilityVehicle: VIN=" + vinNumber + ", Make=" + make + ", Model=" + model + ", Mileage=" + mileage + + ", 4WD=" + fourWheelDrive; + } + + @Override + public void startEngine() { + System.out.println("UtilityVehicle engine started."); + } + + @Override + public void drive(int distance) { + mileage += distance; + System.out.println("UtilityVehicle drove " + distance + " km. Total mileage: " + mileage); + } +} \ No newline at end of file diff --git a/src/Task3/Main.java b/src/Task3/Main.java new file mode 100644 index 0000000..a0257a1 --- /dev/null +++ b/src/Task3/Main.java @@ -0,0 +1,19 @@ +package Task3; + +public class Main { + public static void main(String[] args) { + + TvSeries series = new TvSeries("Breaking Bad", 50, 62); + Movie movie = new Movie("Seven Samurai", 148, 8.8); + + System.out.println(series.getInfo()); + series.play(); + series.pause(); + + System.out.println(); + + System.out.println(movie.getInfo()); + movie.play(); + movie.pause(); + } +} \ No newline at end of file diff --git a/src/Task3/Movie.java b/src/Task3/Movie.java new file mode 100644 index 0000000..4b052d8 --- /dev/null +++ b/src/Task3/Movie.java @@ -0,0 +1,26 @@ +package Task3; + +public class Movie extends Video { + + private double rating; + + public Movie(String title, int duration, double rating) { + super(title, duration); + this.rating = rating; + } + + @Override + public String getInfo() { + return "Movie: " + super.getInfo() + ", Rating=" + rating; + } + + @Override + public void play() { + System.out.println("Playing Movie: " + title); + } + + @Override + public void pause() { + System.out.println("Pausing Movie: " + title); + } +} \ No newline at end of file diff --git a/src/Task3/Playable.java b/src/Task3/Playable.java new file mode 100644 index 0000000..d3464df --- /dev/null +++ b/src/Task3/Playable.java @@ -0,0 +1,6 @@ +package Task3; + +public interface Playable { + void play(); + void pause(); +} \ No newline at end of file diff --git a/src/Task3/TvSeries.java b/src/Task3/TvSeries.java new file mode 100644 index 0000000..eae752f --- /dev/null +++ b/src/Task3/TvSeries.java @@ -0,0 +1,26 @@ +package Task3; + +public class TvSeries extends Video { + + private int episodes; + + public TvSeries(String title, int duration, int episodes) { + super(title, duration); + this.episodes = episodes; + } + + @Override + public String getInfo() { + return "TvSeries: " + super.getInfo() + ", Episodes=" + episodes; + } + + @Override + public void play() { + System.out.println("Playing TV Series: " + title); + } + + @Override + public void pause() { + System.out.println("Pausing TV Series: " + title); + } +} \ No newline at end of file diff --git a/src/Task3/Video.java b/src/Task3/Video.java new file mode 100644 index 0000000..b29912f --- /dev/null +++ b/src/Task3/Video.java @@ -0,0 +1,16 @@ +package Task3; + +public abstract class Video implements Playable { + + protected String title; + protected int duration; + + public Video(String title, int duration) { + this.title = title; + this.duration = duration; + } + + public String getInfo() { + return "Title=" + title + ", Duration=" + duration + " min"; + } +} \ No newline at end of file diff --git a/src/Task4/IntArrayList.java b/src/Task4/IntArrayList.java new file mode 100644 index 0000000..8ae71d9 --- /dev/null +++ b/src/Task4/IntArrayList.java @@ -0,0 +1,37 @@ +package Task4; + +public class IntArrayList implements IntList { + + private int[] data; + private int size; + + public IntArrayList() { + data = new int[10]; + size = 0; + } + + @Override + public void add(int number) { + if (size == data.length) { + int newLength = data.length + data.length / 2; + int[] newData = new int[newLength]; + + for (int i = 0; i < data.length; i++) { + newData[i] = data[i]; + } + + data = newData; + } + + data[size] = number; + size++; + } + + @Override + public int get(int id) { + if (id < 0 || id >= size) { + throw new IndexOutOfBoundsException("Invalid index"); + } + return data[id]; + } +} \ No newline at end of file diff --git a/src/Task4/IntList.java b/src/Task4/IntList.java new file mode 100644 index 0000000..6e13c6a --- /dev/null +++ b/src/Task4/IntList.java @@ -0,0 +1,6 @@ +package Task4; + +public interface IntList { + void add(int number); + int get(int id); +} \ No newline at end of file diff --git a/src/Task4/IntVector.java b/src/Task4/IntVector.java new file mode 100644 index 0000000..74742ac --- /dev/null +++ b/src/Task4/IntVector.java @@ -0,0 +1,37 @@ +package Task4; + +public class IntVector implements IntList { + + private int[] data; + private int size; + + public IntVector() { + data = new int[20]; + size = 0; + } + + @Override + public void add(int number) { + if (size == data.length) { + int newLength = data.length * 2; + int[] newData = new int[newLength]; + + for (int i = 0; i < data.length; i++) { + newData[i] = data[i]; + } + + data = newData; + } + + data[size] = number; + size++; + } + + @Override + public int get(int id) { + if (id < 0 || id >= size) { + throw new IndexOutOfBoundsException("Invalid index"); + } + return data[id]; + } +} \ No newline at end of file diff --git a/src/Task4/Main.java b/src/Task4/Main.java new file mode 100644 index 0000000..ee4ff86 --- /dev/null +++ b/src/Task4/Main.java @@ -0,0 +1,21 @@ +package Task4; + +public class Main { + public static void main(String[] args) { + + IntList list1 = new IntArrayList(); + IntList list2 = new IntVector(); + + for (int i = 1; i <= 15; i++) { + list1.add(i); + } + + for (int i = 1; i <= 25; i++) { + list2.add(i); + } + + + System.out.println("IntArrayList index 10: " + list1.get(10)); + System.out.println("IntVector index 20: " + list2.get(20)); + } +} \ No newline at end of file diff --git a/src/Task4/README.md b/src/Task4/README.md new file mode 100644 index 0000000..7c5cbb6 --- /dev/null +++ b/src/Task4/README.md @@ -0,0 +1,16 @@ +# Task 4 - IntList + +## Efficiency Comparison + +IntArrayList is more efficient when: +- Memory usage is important +- The list does not grow very quickly +- Fewer resizes are needed + +IntVector is more efficient when: +- The list grows rapidly +- Fewer resize operations are desired +- Performance is more important than memory usage + + +_Special Thanks! U can find More in_ [[**gholipourhadi.com**]()] \ No newline at end of file